Práctica: Nuevos Métodos

Continuemos extendiendo Yapp.

Sigue un ejemplo de como programar haciendo uso de esta y la anterior extensión:

%right  '='
%left   '-' '+'
%left   '*' '/'
%left   NEG
%autoaction { my $n = $#_;  bless [@_[1..$n]], $_[0]->YYLhs }
%%
input:                 
        |   input line 
;
line:     '\n'       { } 
        | exp '\n'   { [ $_[1] ] } 
        | error '\n' { }
;
exp:        NUM         |   VAR         |   VAR '=' exp         
        |   exp '+' exp |   exp '-' exp |   exp '*' exp |   exp '/' exp      
        |   '-' exp %prec NEG 
        |   '(' exp ')' { [ $_[2] ] }     
;
%%
...
Veamos la ejecución correspondiente al ejemplo anterior:
$ ./uselhs2.pl
2+3*4
$VAR1 = bless( 
[
  bless( [], 'input' ),
  [
    bless( [
      bless( [ '2' ], 'exp' ),
      '+',
      bless( [
        bless( [ '3' ], 'exp' ), '*', bless( [ '4' ], 'exp' ) ], 'exp' )
    ], 'exp' )
  ]
], 'input' );

Casiano Rodríguez León
2013-04-23