program -> stmt-sequence stmt-sequence -> stmt-sequence ; statement | statement statement -> if-stmt | repeat-stmt | assign-stmt | read-stmt | write-stmt if-stmt -> if boolean-exp then stmt-sequence end | if boolean-exp then stmt-sequence else stmt-sequence end repeat-stmt -> repeat stmt-sequence until boolean-exp assign-stmt -> identifier := integer-exp read-stmt -> read identifier write-stmt -> write integer-exp boolean-exp -> integer-exp comparison-op integer-exp comparison-op -> < | = integer-exp -> integer-exp addop term | term addop -> + | - term -> term mulop factor | factor mulop -> * | / factor -> ( integer-exp ) | number | identifier