The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
%{
  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();