%include { #include #include #include "figure2-15-calc.h" } %syntax_error { printf("***SYNTAX ERROR at line %d!!! (trying recovery)\n",ParseState->linecount); } %parse_failure { printf("***PARSING FAILED!!!!\n"); exit(99); } %parse_accept { /* printf("SUCCESSFUL PARSE!!!\n"); */ } %extra_argument { struct ParseState *ParseState } %left PLUS. %left MINUS. %left DIVIDE. %left MULTIPLY. %nonassoc ASSIGN. program ::= stmt_list. stmt_list ::= stmt stmt_list. stmt_list ::= . stmt ::= ID ASSIGN expr. stmt ::= READ ID. stmt ::= WRITE expr. expr ::= term term_tail. term_tail ::= add_op term term_tail. term_tail ::= . term ::= factor factor_tail. factor_tail ::= mult_op factor factor_tail. factor_tail ::= . factor ::= LPAREN expr RPAREN. factor ::= ID. factor ::= NUMBER. add_op ::= PLUS. add_op ::= MINUS. mult_op ::= MULTIPLY. mult_op ::= DIVIDE.