Skip to content

Grammar

utagawa kiki edited this page May 13, 2019 · 3 revisions

See codes of the frontend for more detail.

Input ::= Expr ;;
Expr ::= Ident
      |  Int
      |  Bool
      |  List
      |  Tuple
      |  "undefined"
      |  Expr "+" Expr
      |  Expr "*" Expr
      |  Expr "<" Expr
      |  Expr "::" Expr
      |  Expr Expr
      |  "if" Expr "then" Expr "else" Expr
      |  "fun" Ident Ident* "->" Expr
      |  "let" Ident Ident* "=" Expr "in" Expr
      |  "let" "rec" Ident Ident* = Expr "in" Expr
      |  "match" Expr "with" "|"? Guard+
Bool ::= "true" | "false"
List ::= "[" (Expr (";" Expr)*)? "]"
Tuple ::= "(" Expr ("," Expr)+ ")"
Guard ::= "|" Pattern "->" Expr
Pattern ::= Ident
         |  Int
         |  Bool
         |  Pattern "::" Pattern
         |  ListPattern
         |  TuplePattern
ListPattern ::= "[" (Pattern (";" Pattern)*)? "]"
TuplePattern ::= "(" Pattern ("," Pattern)+ ")"
Clone this wiki locally