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