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 =      "==" | "<" | ">".