EBNF Grammar of Taste
Taste = "program" ident "{" {VarDecl} {ProcDecl} "}".
VarDecl = Type ident {"," ident} ";".
ProcDecl = "void" ident "(" ")" "{" {VarDecl | Stat} "}".
Type = "int" | "bool".
Stat = ident ("=" Expr ";" | "(" ")" ";")
| "if" "(" Expr ")" Stat ["else" Stat]
| "while "(" Expr ")" Stat
| "read" ident ";"
| "write" Expr ";"
| "{" {Stat | VarDecl} "}".
Expr = SimExpr [RelOp SimExpr].
SimExpr = Term {AddOp Term}.
Term = Factor {MulOp Factor}.
Factor = (ident | "true" | "false" | number | "-" Factor).
AddOp = "+" | "-".
MulOp = "*" | "/".
RelOp = "==" | "<" | ">".