#!/usr/bin/perl -w
use strict;
#use Test::More tests=>4;
use Test::More qw{no_plan};
use_ok qw(Parse::Eyapp) or exit;
my $grammar = q{
%semantic token 'a' 'b' 'c'
%tree
%%
S: %name ABC
A B C
| %name BC
B C
;
A: %name A
'a'
;
B: %name B
'b'
;
C: %name C
'c'
;
%%
sub _Error {
die "Syntax error.\n";
}
my $in;
sub _Lexer {
my($parser)=shift;
{
$in or return('',undef);
$in =~ s/^\s+//;
$in =~ s/^([AaBbCc])// and return($1,$1);
$in =~ s/^(.)//s and print "<$1>\n";
redo;
}
}
my $b = 4+ ;# Semantic error
sub Run {
my($self)=shift;
$in = shift;
#$in = <>;
$self->YYParse( yylex => \&_Lexer, yyerror => \&_Error, );
}
}; # end grammar
eval {
Parse::Eyapp->new_grammar(input=>$grammar, chuchu => 4);
};
like($@, qr/Parse::Eyapp::Output::new_grammar Error!: unknown argumen/, 'Unknown arg for new_grammar');
eval {
Parse::Eyapp->new_grammar(input=>$grammar, 4);
};
like($@, qr/Error in new_grammar: Use named argument/, 'Odd number of args for new_grammar');
eval {
Parse::Eyapp->new_grammar(input=>$grammar);
};
like($@, qr/Error in new_grammar: Please provide a name for the grammar/, 'class not provided for new_grammar');
eval {
Parse::Eyapp->new_grammar(input=>$grammar, classname=>'AB', firstline => 9,); # outputfile => 'AB.pm')
};
like($@, qr/Error while compiling your parser:/, 'grammar has semantic errors');