The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
%{
=head1 SYNOPSIS

This example illustrates a way to set a naming scheme for
the grammar productions using C<give_token_name>.

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_token_names.eyp 

and run it:
                  $ ./give_token_names.pm -t -i -m 1 -c '*a = b'

It will produce an output like:


        s_is_ASSIGN(
          l_is_POINTER(
            TERMINAL,
            r_is_l(
              l_is_VAR(
                TERMINAL[a]
              )
            )
          ),
          TERMINAL,
          r_is_l(
            l_is_VAR(
              TERMINAL[b]
            )
          )
        )


The main difference between this file and C<give_names_to_tokens.eyp>
is that the tokens in the right hand sides 
are already identifiers: C<ASSIGN> and C<POINTER>.

=cut
%}

%strict

%token ASSIGN  = /=/
%token POINTER = /\*/
%token VAR = /([A-Za-z][A-Za-z0-9_]*)/

%namingscheme { \&give_token_name; }

%tree

%%
s:
    l ASSIGN r
  | r
;

l:
    POINTER r
  | VAR
;

r:
    l
;

%%