| Up | Next |
|
How do you share a single grammar amongst several tools that operate on the
same language?
| |
| ... systematically named functions. | ... or methods. |
%right ASSIGN /* lowest precedence */ %left PLUS /* highest precedence */ |
%right ASSIGN /* lowest precedence */ %left PLUS /* highest precedence */ |
|
|
%{
translator *context;
%}
|
%% |
%% |
expression
: IDENTIFIER
{ $$ = parse_expression_identifier($1); }
| expression PLUS expression
{ $$ = parse_expression_addition($1, $3); }
| expression ASSIGN expression
{ $$ = parse_expression_assignment($1, $3); }
| etc etc
;
|
expression
: IDENTIFIER
{ $$ = context->expression_identifier($1); }
| expression PLUS expression
{ $$ = context->expression_addition($1, $3); }
| expression ASSIGN expression
{ $$ = context->expression_assignment($1, $3); }
| etc etc
;
|
|
Aha! What if the methods were virtual?
You get an AST factory abstraction you can share amongst tools: |
|