%{
my $stmt;
%}
%%
prg: stmt *
;
sos:
/* empty */ { $stmt++ }
;
stmt:
'\n'
| sos 'nop' '\n'
;
%%
my @input = ("nop", "\n", "org", "\n");
sub my_lexer {
my $t = shift(@input);
($t, $t);
}
sub my_error {
my($self) = @_;
my $t = $self->YYCurval || "eof";
my @expected = map { $_ eq "\n"? q{'\\n'} : qq{'$_'} } $self->YYExpect();
local $" = ', ';
die("Statement $stmt: Syntax error at $t. Expected (@expected).\n");
}
sub main {
__PACKAGE__->new->YYParse( yylex => \&my_lexer, yyerror => \&my_error);
}
main();