ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Scala로 WAE 정의하기
    컴공지식/프로그래밍언어론 2024. 9. 11. 15:51

    WAE의 문법을 Scalacase 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}처럼 x3을 바인딩하고, x + x를 계산하는 역할을 한다.

    Id(name: Symbol): 식별자를 나타내는 클래스로 x, y 같은 변수를 나타낸다.

     

    실제 코드 예시를 살펴보자

    val expr = With('x, Num(3), Add(Id('x), Id('x)))

    이 예제는 x3으로 바인딩하고, x + x를 계산하는 표현식이다.

    결과는 3 + 3이니까 6이 나온다.

     

    Scala로 WAE 구현의 장점으로는

    case class를 사용해서 표현식을 간결하게 표현할 수 있고,

    프로그램 내에서 추상 문법을 처리하기 쉽게 만들어준다.

    그리고 복잡한 계산도 변수를 바인딩하면서 단계적으로 처리할 수 있게 한다.

     

     

Designed by Tistory.