Up, Prev | Next |
There is a problem with the assignment expression.
expression : expression ASSIGN expression { $$ = context->expression_assignment($1, $3); } | IDENTIFIER { $$ = context->expression_identifier($1); } | etc etc ; Let's play whack-a-mole. void translator::expression_assignment(expression *lhs, expression *rhs) { expression_ldl *t1 = dynamic_cast<expression_ldl>(lhs) if (t1) return new expression_stl(t1->get_address(), rhs); expression_ldo *t2 = dynamic_cast<expression_ldo>(lhs) if (t2) return new expression_sro(t2->get_address(), rhs); etc etc etc yyerror("left hand side of assignment inappropriate"); return new expression_error(); } |
This is another imperative type-based dispatch. |