(* l06 - expressions with keywords *) program = [ 'CONST' { id '=' ( number | id ) ';' } ] [ 'VAR' { id ':' id ';' } ] 'BEGIN' statement { ';' statement } '.' . statement = [ id ':=' expression | 'WRITE' expression ] . expression = simplexpr [ relop simplexpr ] . simplexpr = [ '+' | '-' ] term { addop term } . term = factor { mulop factor } . factor = number | id | '(' expression ')' | '~' factor . relop = '=' | '#' | '<>' | '<' | '<=' | '>' | '>=' . addop = '+' | '-' | '|' . mulop = '*' | '/' | '&' . (* l06 = l05 + keywords 2010-07-08, v00: No control structures without keywords, so keywords first. 2010-07-13, v01: Only non-functional modifications: - Prsr: IF -> CASE where appropriate - Scnr: TSymbol ordered for parser convenience (OR -> range), sExcl removed *)