The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/*VIM: set ts=2 */
%{
=head1 SYNOPSIS

See 
   
   http://search.cpan.org/perldoc?Parse::Eyapp::debuggingtut
   file DebugLookForward2.eyp

This grammar fixes the conflicts an bugs in Debug.eyp and Debug1.eyp

Be sure C<DebugTail.pm> is reachable
compile it with 

      eyapp -b '' DebugLookForward2.eyp

execute the generated modulino with:

      ./DebugLookForward2.pm -t -i -nos

=head1 See also

    Debug.eyp Debug1.eyp Debug2.eyp 

=cut

our $VERSION = '0.01';

%}

%lexer {
       s{^(\s+)}{} and $self->tokenline($1 =~ tr{\n}{});
       return ('',undef) unless $_;

       return ($1,$1) if s/^([sSDd])//;
       return ('SEMICOLONS', 'SEMICOLONS') if s/^;\s*S/S/;
       return (';', ';') if s/^;//;
       die "Syntax error at line num ${$self->line()}: ${substr($_,0,10)}\n";
    }

%token D S
%syntactic token SEMICOLONS 

%tree

%%
p:
    %name P
    ds SEMICOLONS ss  
  | %name SS
    ss
;

ds:
    %name D2
      D ';' ds   
  | %name D1
      D       
;

ss:
    %name S2
      S SEMICOLONS ss     
  | %name S1
      S       
;

%%

__PACKAGE__->main('Provide a statement like "D; D; S" and press <CR><CTRL-D>: ') unless caller;