%token NUM = /(\d+)/ %token OP = /([-+*\/])/ %{ my $nxs = 0; %} %conflict isInTheMiddle { $nxs++; if ($nxs == $self->YYVal('ExpList')) { print "Reducing by :MIDx\n"; $self->YYSetReduce(':MIDx' ); $nxs = 0; } else { $self->YYSetShift() } } %explorer isInTheMiddle 'ExpList' %% T: %isInTheMiddle? S ; S: x %PREC isInTheMiddle S x | %name :MIDx x %PREC isInTheMiddle ; x: NUM | x OP NUM ; %% =head1 SYNOPSIS This grammar is similar to the one in file C<nopackrat.eyp>. It can't be parsed by LR(k) nor LL(k) algorithms. Backtracking LR and GLR algorithms can but will perform poorly. Compile it with: $ eyapp -P ExpList.eyp $ eyapp -TC noPackratSolvedExpRGconcept.eyp Run it with: $ ./noPackratSolvedExpRGconcept.pm -t -i -m 1 -c '2-3 3*4 5+2' =head1 SEE ALSO Files C<nopackrat.eyp>, C<noLRk_exp.eyp>, C<noLRk_expSolved.eyp> =cut