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