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