%{ # GiveNamesToCalc.eyp =head1 SYNOPSIS This example illustrates a way to set a naming scheme for the grammar productions. Compile it with: $ eyapp -C GiveNamesToCalc.eyp and execute it with: $ ./GiveNamesToCalc.pm -t -i -c 'a=2*3' It will produce an output like: line_is_exp(var_is_VAR[a],exp_is_TIMES(exp_is_NUM[2],exp_is_NUM[3])) =cut %} %token NUM = /([0-9]+(?:\.[0-9]+)?)/ %token VAR = /([A-Za-z][A-Za-z0-9_]*)/ %right '=' %left '-' '+' %left '*' '/' %left NEG %right '^' %tree bypass %namingscheme { #Receives a Parse::Eyapp object describing the grammar my $self = shift; $self->tokennames( '=' => 'ASSIGN', '+' => 'PLUS', '*' => 'TIMES', '-' => 'MINUS', '/' => 'DIV', '^' => 'EXP', ); # returns the handler that will give names # to the right hand sides \&give_token_name; } %% line: exp ; exp: NUM | VAR | var '=' exp | exp '+' exp | exp '-' exp | exp '*' exp | exp '/' exp | %no bypass exp_is_NEG '-' exp %prec NEG | exp '^' exp | '(' exp ')' ; var: VAR ; %%