/* expr-tree.bison */ %token INT %type Exp %% line : expr '\n' { cout << ($1)->eval(); } ; expr : expr '+' term { $$ = new PlusExp($1, $3); } | term ; term : term '*' fact { $$ = new TimesExp($1, $3); } | fact ; fact : '(' expr ')' { $$ = $2; } | INT { $$ = new IntegerLiteral($1); } ;