%{ =head1 SYNOPSIS This example illustrates a way to set a naming scheme for the grammar productions using C. give_token_name: The name of the production is the Left Hand Side of the Production Rule followed by the word _is_ followed by the concatenation of the names of the tokens in the right hand side (separated by underscores). Compile it with: $ eyapp -C give_names_to_tokens.eyp and run it: $ ./give_names_to_tokens.pm -t -i -c '*a = b' It will produce an output like: s_is_ASSIGN(l_is_STAR(r_is_l(l_is_VAR(TERMINAL[a]))),r_is_l(l_is_VAR(TERMINAL[b]))) The main difference between this file and C is that here C<'='> and C<'*'> are used and therefore we must associate with them identifiers via the method C. =cut %} %token VAR = /([A-Za-z][A-Za-z0-9_]*)/ %namingscheme { #Receives a Parse::Eyapp object describing the grammar my $self = shift; $self->tokennames( '=' => 'ASSIGN', '*' => 'STAR', ); # returns the handler that will give names # to the right hand sides \&give_token_name; } %tree %% s: l '=' r | r ; l: '*' r | VAR ; r: l ; %%