Program: (FunDecl)* FunDecl: "FUN" Ident "=" Expr Expr: "(" Expr ")" | Expr AddOp Expr | Expr MultOp Expr | Expr CmpOp Expr | Ident | Number | FunAppl | UnOp Expr | IfExpr IfExpr: "IF" Expr "THEN" Expr ["ELSE" Expr] "FI" FunAppl: Ident "(" [Expr ("," Expr)*] ")" AddOp: ("+" | "-" | "OR") MultOp: ("*" | "/" | "%" | "AND") CmpOp: ("==" | "!=" | "<=" | ">=" | ">" | "<"") UnOp: ("-" | "!") Ident: LETTER (LETTER|DIGIT)* Number: DIGIT+ LETTER: [a-zA-Z] DIGIT: [0-9] --------------------------------------------------------- Expr: Term [AddOp Term] | UnOp Expr | FunAppl Term: Factor [MultOp Factor] Factor: Element [CmpOp Element] Element: Ident | Number | "(" Expr ")"