-
Scala로 WAE 정의하기컴공지식/프로그래밍언어론 2024. 9. 11. 15:51
WAE의 문법을 Scala의 case class를 사용해 정의할 수 있다.
trait Expr
case class Num(n: Int) extends Expr
case class Add(lhs: Expr, rhs: Expr) extends Expr
case class Sub(lhs: Expr, rhs: Expr) extends Expr
case class With(name: Symbol, nameExp: Expr, body: Expr) extends Expr
case class Id(name: Symbol) extends Expr각 클래스를 설명하자면,
Num(n: Int): 숫자를 나타내는 클래스로 Num(5)는 숫자 5를 의미한다.
Add(lhs: Expr, rhs: Expr): 덧셈을 나타내는 클래스로 Add(Num(3), Num(4))는 3 + 4를 의미한다.
With(name: Symbol, nameExp: Expr, body: Expr): with 구문을 나타내는 클래스로 with {x 3} {+ x x}처럼 x에 3을 바인딩하고, x + x를 계산하는 역할을 한다.
Id(name: Symbol): 식별자를 나타내는 클래스로 x, y 같은 변수를 나타낸다.
실제 코드 예시를 살펴보자
val expr = With('x, Num(3), Add(Id('x), Id('x)))
이 예제는 x를 3으로 바인딩하고, x + x를 계산하는 표현식이다.
결과는 3 + 3이니까 6이 나온다.
Scala로 WAE 구현의 장점으로는
case class를 사용해서 표현식을 간결하게 표현할 수 있고,
프로그램 내에서 추상 문법을 처리하기 쉽게 만들어준다.
그리고 복잡한 계산도 변수를 바인딩하면서 단계적으로 처리할 수 있게 한다.
'컴공지식 > 프로그래밍언어론' 카테고리의 다른 글
함수 정의하기 (0) 2024.09.28 Substitution(치환)에 관하여 (1) 2024.09.22 BNF로 식별자 정의하기 (0) 2024.09.11 Bound and Free Identifiers (바운드/자유 식별자) (0) 2024.09.11 Arithmetic Expressions (AE)와 WAE (0) 2024.09.11