File Coverage

blib/lib/Parse/Java.pm
Criterion Covered Total %
statement 194 235 82.5
branch 47 62 75.8
condition 22 30 73.3
subroutine 40 43 93.0
pod 3 4 75.0
total 306 374 81.8


line stmt bran cond sub pod time code
1             package Parse::Java;
2              
3             require 5.006;
4              
5 6     6   242412 use warnings;
  6         17  
  6         185  
6 6     6   34 use strict;
  6         11  
  6         267  
7              
8 6     6   29 use Carp qw(croak);
  6         18  
  6         519  
9 6     6   32 use File::Spec;
  6         12  
  6         157  
10 6     6   10752 use Parse::Yapp;
  6         201670  
  6         3648  
11              
12             our $VERSION = "0.01_01";
13              
14             BEGIN {
15             # Load grammar when we use the module
16 6     6   23 my $base_dir = __FILE__;
17 6         54 $base_dir =~ s/Java\.pm$//;
18              
19 6   50     703 open my $grammar_io, "<", File::Spec->catfile($base_dir, 'Java.yp') || die $!;
20 6         22 my $grammar_src = do { local $/; <$grammar_io>; };
  6         30  
  6         322  
21 6         72 close $grammar_io;
22            
23 6         68 my $parser = Parse::Yapp->new(input => $grammar_src);
24 6         268739 my $parser_src = $parser->Output(
25             classname => __PACKAGE__,
26             standalone => 0,
27             linenumbers => 0,
28             template => undef,
29             );
30              
31 6 50 100 6 0 10764 if (!eval $parser_src) {
  6 100 100 6   61  
  6 100 100 6   11  
  6 100 100 6   390  
  6 50 100 6   36  
  6 100 100 6   10  
  6 100 100 6   376  
  6 100   6   37  
  6 100   6   11  
  6 100   6   313  
  6 100   6   32  
  6 100   6   9  
  6 100   6   398  
  6 100   6   4553  
  6 100   6   22  
  6 100   6   64  
  6 100   6   8620  
  6 100   6   18  
  6 100   6   69  
  6 100   6   370  
  6 50   6   11  
  6 50   6   54  
  6     6   3820  
  6     6   14  
  6     6   311  
  6     6   4373  
  6     6   20  
  6     0   83  
  6     0   5145  
  6     6538   16  
  6     6549   83  
  6     4   3750  
  6     30   18  
  6     30   84  
  6         5382  
  6         14  
  6         110  
  6         354  
  6         11  
  6         68  
  6         5102  
  6         16  
  6         72  
  6         340  
  6         15  
  6         71  
  6         9323  
  6         18  
  6         81  
  6         3640  
  6         18  
  6         68  
  6         372  
  6         14  
  6         63  
  6         10751  
  6         18  
  6         60  
  6         9554  
  6         16  
  6         56  
  6         3869  
  6         18  
  6         74  
  6         3767  
  6         18  
  6         71  
  6         288  
  6         11  
  6         140  
  6         3440  
  6         20  
  6         49  
  6         355  
  6         13  
  6         70  
  6         312  
  6         13  
  6         64  
  6         17380  
  6         387  
  6         89  
  0         0  
  1         104  
  1         41  
  1         59  
  0         0  
  1         49  
  2         115  
  1         4  
  1         4  
  4         248  
  1         103  
  2         116  
  1         31  
  0         0  
  1         47  
  1         4  
  2         43  
  0         0  
  3         144  
  3         158  
  2         87  
  3         309  
  0         0  
  1         137  
  1         58  
  1         34  
  0         0  
  0         0  
  0         0  
  6538         24456  
  6538         35739  
  6549         480420  
  6549         18221  
  21055         241539  
  21038         73438  
  14491         32451  
  1         3  
  14490         17384  
  6547         14508  
  1         3  
  1         3  
  0         0  
  1         2  
  6546         30210  
  16         48  
  1         3  
  15         22  
  6530         192125  
  17         45  
  6513         86508  
  67         165  
  6446         26996  
  13         27  
  6433         36374  
  176         370  
  6257         45745  
  2838         10968  
  629         1655  
  2209         11010  
  2192         4811  
  2100         4081  
  3419         14394  
  3028         8599  
  391         1457  
  32         130  
  359         1498  
  190         633  
  169         1104  
  158         556  
  11         1864  
  17         122  
  4         9  
  4         6  
  4         18  
  4         41  
  30         3576  
  30         59  
  30         133  
  30         1017  
  30         30294  
  30         112  
  30         3029  
  30         2868  
32             # Ohooh.. grammar error.. need to debug
33 0         0 my ($line) = $@ =~ /line (\d+)/;
34 0 0       0 my $first = $line - 3 >= 0 ? $line - 3 : 0;
35 0         0 my $last = $line + 3;
36 0         0 my $line_no = 0;
37              
38 0         0 print STDERR "Got error: $@";
39 0         0 my @src_lines = split/\n/, $parser_src;
40 0         0 for my $src_line (@src_lines) {
41 0 0       0 $src_line = ($line_no == $line ? '>>' : ' ') . $src_line;
42 0 0       0 print STDERR $src_line, "\n", if ($line_no >= $first);
43 0 0       0 last if $line_no > $last;
44 0         0 $line_no++;
45             }
46             }
47            
48 6 50       3596 if ($ENV{PARSE_JAVA_DEBUG}) {
49 0         0 my $output = "Java.output";
50 0         0 my $tmp;
51              
52 0 0       0 open(OUT, ">$output") || croak $!;
53              
54 0   0     0 $tmp = $parser->Warnings() || "";
55 0         0 print OUT "Warnings:\n---------\n$tmp\n";
56 0   0     0 $tmp = $parser->Conflicts() || "";
57 0         0 print OUT "Conflicts:\n----------\n$tmp\n";
58 0         0 print OUT "Rules:\n------\n";
59 0         0 print OUT $parser->ShowRules()."\n";
60 0         0 print OUT "States:\n-------\n";
61 0         0 print OUT $parser->ShowDfa()."\n";
62 0         0 print OUT "Summary:\n--------\n";
63 0         0 print OUT $parser->Summary();
64              
65 0         0 close(OUT);
66             }
67             }
68              
69             sub parse_file {
70 0     0 1 0 my ($pkg, $file) = @_;
71              
72 0   0     0 open my $io, "<", $file || croak $!;
73 0         0 my $source = do { local $/; <$io>; };
  0         0  
  0         0  
74 0         0 close $io;
75            
76 0         0 return $pkg->parse_string($source);
77             }
78              
79             # This routine flattens Parse::Java::Tokens
80             sub detokenize {
81 26     26 1 39 my $ast = pop;
82            
83 26 100       62 if (ref $ast eq 'Parse::Java::Token') {
84 7         30 return $ast->as_string;
85             }
86            
87 19 100       52 if (ref $ast eq 'ARRAY') {
    100          
88 8         25 $_ = detokenize($_) for @$ast;
89             }
90             elsif(ref $ast) {
91 9         40 for (keys %$ast) {
92 16         157 $ast->{$_} = detokenize($ast->{$_});
93             }
94             }
95            
96 19         174 return $ast;
97             }
98              
99             sub parse_string {
100 4     4 1 5327 my ($pkg, $source) = @_;
101            
102 4         136 my $parser = Parse::Java->new();
103 4         114 $parser->_set_input($source);
104 4         274 my $ast = $parser->_run();
105              
106 4         440 return $ast;
107             }
108              
109             1; # Magic true value required at end of module
110             __END__