File Coverage

SPOCP/SExpr/Parser.y
Criterion Covered Total %
statement 14 18 77.7
branch 5 8 62.5
condition n/a
subroutine 6 7 85.7
pod 0 2 0.0
total 25 35 71.4


line stmt bran cond sub pod time code
1             %token ATOM
2              
3             %%
4              
5 6     6   175 sexp: '(' list ')' { $_[2]; }
6             ;
7              
8 15     15   354 list: list element { push(@{$_[1]}, $_[2]); $_[1] }|
  15         32  
  15         30  
9 6     6   155 { []; }
10             ;
11              
12 10     10   267 element: ATOM { $_[1]; } |
13 5     5   120 sexp { $_[1]; }
14 23         361 ;
15              
16             %%
17 23         53  
18             sub yylex
19             {
20 22     23 0 133 my $parser = shift;
21              
22 22 100       141 $parser->YYData->{INPUT} or return('', undef);
23              
24 23         210 $parser->YYData->{INPUT} =~ s/^\s+//;
25 23         300 $parser->YYData->{INPUT} =~ s/^#.*$//;
26              
27 10         76 for ($parser->YYData->{INPUT})
28             {
29 0 100         s/^([\(\)])// and return($1, undef);
30 0 50         s/^([^\s\(\)]+)// and return('ATOM',$1);
31 0 0         s/^(.)//s and return($1, $1);
32             }
33 0           return('', undef)
34             }
35              
36             sub yyerror
37             {
38       0 0   my ($msg, $s) = @_;
39             die "$msg\n";
40             }