| Up, Prev | Next |
| ... imperative type-based dispatch | ... facility of the C++ language |
|
expression
: expression ASSIGN expression
{ $$ = $1->expression_assignment($3); }
;
|
void
translator::expression_assignment(expression *lhs, expression *rhs)
{
|
class expression
{
public:
virtual expression *assignment_expression(expression *rhs);
};
|
expression_ldl *t1 = dynamic_cast<expression_ldo>(lhs)
if (t1)
return new expression_sro(t1->get_address(), rhs);
|
expression *
expression_ldo::assignment_factory(expression *rhs)
{
return new expression_sro(address, rhs);
}
|
| etc etc etc | etc etc etc |
yyerror("left hand side of assignment inappropriate");
return new expression_error();
}
|
expression *
expression::assignment_factory(expression *)
{
yyerror("left hand side of assignment inappropriate");
return new expression_error();
}
|
|
Now you have a translator class that can manufacture an expression class
that can manufacture another expression class.
You have a factory factory. |
|