2. Abstract SyntaxΒΆ

signature:

module signatures/Calc-sig

imports signatures/CalcLexical-sig

signature
  sorts Program Exp Type
  constructors
    Program       : List(Stat) -> Program
    Exp           : Exp -> Stat
    Bind          : ID * Exp -> Stat
    Program-Plhdr : Program
    Stat-Plhdr    : Stat
    ID-Plhdr      : ID
    Exp-Plhdr     : Exp
    Num           : NUM -> Exp
    Min           : Exp -> Exp
    Pow           : Exp * Exp -> Exp
    Mul           : Exp * Exp -> Exp
    Div           : Exp * Exp -> Exp
    Sub           : Exp * Exp -> Exp
    Add           : Exp * Exp -> Exp
    Eq            : Exp * Exp -> Exp
    Neq           : Exp * Exp -> Exp
    Gt            : Exp * Exp -> Exp
    Lt            : Exp * Exp -> Exp
    NUM-Plhdr     : NUM
    Exp-Plhdr     : Exp
    True          : Exp
    False         : Exp
    Not           : Exp -> Exp
    And           : Exp * Exp -> Exp
    Or            : Exp * Exp -> Exp
    If            : Exp * Exp * Exp -> Exp
    Exp-Plhdr     : Exp
    Var           : ID -> Exp
    Let           : ID * Exp * Exp -> Exp
    Fun           : List(ID) * Exp -> Exp
    App           : Exp * Exp -> Exp
    ID-Plhdr      : ID
    Exp-Plhdr     : Exp
    NumT          : Type
    BoolT         : Type
    FunT          : Exp * Exp -> Type
    Exp-Plhdr     : Exp