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