(* Grammar definition in EBNF format. *) Expression = TermExpression; TermExpression = FactorExpression { ("+" | "-") FactorExpression }; FactorExpression = UnaryExpression { ("*" | "/") UnaryExpression }; UnaryExpression = ( "-" | "!" ) | GroupExpression; UnitExpression = NaturalDigit {Digit} | "(" Expression ")";; (* Basics *) NaturalDigit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; Digit = "0" | NaturalDigit ;