.\" .\" UCSD p-System cross compiler .\" Copyright (C) 2006, 2007, 2011, 2012 Peter Miller .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or (at .\" you option) any later version. .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU .\" General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License along .\" with this program. If not, see .\" .ad l .hy 0 Compilers and Factories, 5
Back Next

Method

If the technique is carried to its logical extreme, the production bodies all call...

... systematically named functions. ... or methods.
%%

expression
  : IDENTIFIER
     { $$ = parse_expression_identifier($1); }
  | expression PLUS expression
     { $$ = parse_expression_addition($1, $3); }
  | expression ASSIGN expression
     { $$ = parse_expression_assignment($1, $3); }
  | etc etc
  ;
%{
translator *context;
%}

%%

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?

/* vim: set ts=8 sw=4 et : */