stmt -> assigment | cond | loop assignment -> id := expr cond -> if boolexpr then stmt fi | if boolexpr then stmt else stmt fi loop -> while boolexpr do stmt od expr -> boolexpr | numexpr boolexpr -> numexpr cop numexpr numexpr -> numexpr + term | term term -> term * factor | factor factor -> id | const | (numexpr)