|  line  | 
 true  | 
 false  | 
 branch  | 
 
| 
42
 | 
 0  | 
 0  | 
 defined $verbosity ? :  | 
 
| 
58
 | 
 0  | 
 189  | 
 unless defined $option  | 
 
| 
60
 | 
 0  | 
 189  | 
 unless exists $self->{'generationoptions'}{$option}  | 
 
| 
93
 | 
 0  | 
 32  | 
 if exists $rules->{$rulename}  | 
 
| 
106
 | 
 0  | 
 0  | 
 unless exists $rules->{$rulename}  | 
 
| 
122
 | 
 1  | 
 0  | 
 unless exists $subrules->{$rulename}  | 
 
| 
137
 | 
 0  | 
 0  | 
 unless exists $self->{'subrules'}{$rulename}  | 
 
| 
148
 | 
 0  | 
 0  | 
 if ($_ eq $subrulename) { }  | 
 
| 
159
 | 
 0  | 
 0  | 
 if ($status)  | 
 
| 
162
 | 
 0  | 
 0  | 
 unless exists $rules->{$subrulename}  | 
 
| 
173
 | 
 0  | 
 5  | 
 unless exists $rules->{$rulename}  | 
 
| 
184
 | 
 0  | 
 96  | 
 unless (exists $rules->{$rulename})  | 
 
| 
186
 | 
 0  | 
 0  | 
 unless defined $parent  | 
 
| 
198
 | 
 0  | 
 32  | 
 unless exists $rules->{$rulename}  | 
 
| 
208
 | 
 0  | 
 5  | 
 unless exists $subrules->{$rulename}  | 
 
| 
212
 | 
 5  | 
 4  | 
 if $sr eq $subrulename  | 
 
| 
226
 | 
 14  | 
 0  | 
 if exists $context->{'level'}  | 
 
| 
227
 | 
 0  | 
 14  | 
 unless defined $level  | 
 
| 
245
 | 
 0  | 
 360  | 
 if ref $token ne "HASH"  | 
 
| 
248
 | 
 51  | 
 309  | 
 if exists $token->{$tag}  | 
 
| 
262
 | 
 0  | 
 1  | 
 if ref $mxtoken ne "HASH"  | 
 
| 
266
 | 
 0  | 
 1  | 
 unless (exists $mxtoken->{'class4list'})  | 
 
| 
279
 | 
 0  | 
 1  | 
 if exists $mxtoken->{'grammarstate'}  | 
 
| 
280
 | 
 0  | 
 1  | 
 if exists $mxtoken->{'isFragmentOrChild'}  | 
 
| 
285
 | 
 0  | 
 0  | 
 if (exists $mxtoken->{'rhs'} and exists $mxtoken->{'rhs'}{'token'})  | 
 
| 
288
 | 
 0  | 
 0  | 
 if (ref $token eq "")  | 
 
| 
301
 | 
 0  | 
 0  | 
 $case =~ /^U/i ? :  | 
 
| 
331
 | 
 0  | 
 0  | 
 if ($lcp =~ /[A-Z]/i) { }  | 
 
| 
336
 | 
 0  | 
 0  | 
 if length $rest > 0  | 
 
| 
337
 | 
 0  | 
 0  | 
 if length $uctoken > 1  | 
 
| 
344
 | 
 0  | 
 0  | 
 if length $uctoken > 1  | 
 
| 
354
 | 
 17  | 
 4  | 
 if $string =~ /^.$/  | 
 
| 
355
 | 
 1  | 
 3  | 
 if $string =~ /^\\[^u]$/i  | 
 
| 
356
 | 
 0  | 
 3  | 
 if $string =~ /^\\u[0-9A-F]{4,4}$/i  | 
 
| 
357
 | 
 0  | 
 3  | 
 if $string =~ /^\\u\{[0-9A-F]{5,5}\}$/i  | 
 
| 
365
 | 
 62  | 
 9  | 
 unless exists $rule->{'class4list'}  | 
 
| 
367
 | 
 0  | 
 0  | 
 if $rulename =~ /^[a-z]$/i and $s =~ /([a-z])([a-z])/i and uc "$1" eq "$2" || lc "$1" eq "$2"  | 
 
| 
378
 | 
 30  | 
 30  | 
 unless exists $rule->{'class4list'}  | 
 
| 
381
 | 
 1  | 
 6  | 
 if $string =~ /([a-z])([a-z])/i and uc "$1" eq "$2" || lc "$1" eq "$2"  | 
 
| 
382
 | 
 21  | 
 8  | 
 unless $string =~ /[a-z]/i  | 
 
| 
383
 | 
 5  | 
 3  | 
 if $string =~ /[0-9]/i  | 
 
| 
392
 | 
 3  | 
 18  | 
 unless isSingleChar($literal)  | 
 
| 
404
 | 
 0  | 
 0  | 
 if $begr->{'type'} ne "literal" or $endr->{'type'} ne "literal"  | 
 
| 
409
 | 
 0  | 
 0  | 
 unless isSingleChar($begr) and isSingleChar($endr)  | 
 
| 
420
 | 
 0  | 
 120  | 
 unless exists $tracker->{'status'}  | 
 
| 
422
 | 
 90  | 
 30  | 
 if (not exists $mxelement->{'class4list'} or $tracker->{'status'} == -1) { }  | 
 
| 
436
 | 
 0  | 
 60  | 
 unless exists $tracker->{'status'}  | 
 
| 
438
 | 
 45  | 
 15  | 
 if (not exists $mxelement->{'keywordfragment'} or $tracker->{'status'} == -1) { }  | 
 
| 
452
 | 
 8  | 
 10  | 
 unless exists $context->{'subruleindex'}{$rulename}{'index'}  | 
 
| 
457
 | 
 4  | 
 14  | 
 if (defined $cardinality and $cardinality eq "?")  | 
 
| 
478
 | 
 0  | 
 18  | 
 if (defined $negation)  | 
 
| 
488
 | 
 14  | 
 4  | 
 if exists $context->{'subruleindex'}{$rulename}{'grammarstate'}  | 
 
| 
489
 | 
 7  | 
 11  | 
 if exists $context->{'subruleindex'}{$rulename}{'isFragmentOrChild'}  | 
 
| 
494
 | 
 4  | 
 14  | 
 if defined $cardinality and $cardinality eq "?"  | 
 
| 
504
 | 
 0  | 
 18  | 
 if exists $mxelement->{'class4list'} and not defined $cardinality  | 
 
| 
505
 | 
 14  | 
 4  | 
 if exists $context->{'subruleindex'}{$rulename}{'grammarstate'}  | 
 
| 
506
 | 
 7  | 
 11  | 
 if exists $context->{'subruleindex'}{$rulename}{'isFragmentOrChild'}  | 
 
| 
529
 | 
 0  | 
 40  | 
 if (ref $token eq "HASH" and exists $token->{'comment'} and not $self->testoption("stripallcomments"))  | 
 
| 
531
 | 
 0  | 
 0  | 
 if ref $token->{'comment'} ne ""  | 
 
| 
540
 | 
 0  | 
 40  | 
 if (ref $token eq "")  | 
 
| 
547
 | 
 9  | 
 31  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "tokengroup")  | 
 
| 
554
 | 
 0  | 
 31  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "rulegroup")  | 
 
| 
563
 | 
 21  | 
 10  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "literal")  | 
 
| 
567
 | 
 18  | 
 3  | 
 if defined $class4list  | 
 
| 
570
 | 
 9  | 
 1  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "class")  | 
 
| 
574
 | 
 0  | 
 1  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "regex")  | 
 
| 
578
 | 
 0  | 
 1  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "range")  | 
 
| 
582
 | 
 0  | 
 1  | 
 if (ref $token eq "HASH" and exists $token->{'type'} and $token->{'type'} eq "value")  | 
 
| 
586
 | 
 1  | 
 0  | 
 if (ref $token eq "HASH" and exists $token->{'token'})  | 
 
| 
590
 | 
 0  | 
 0  | 
 if (ref $token eq "HASH" and exists $token->{'action'})  | 
 
| 
594
 | 
 0  | 
 0  | 
 if (ref $token eq "HASH" and exists $token->{'comment'})  | 
 
| 
607
 | 
 1  | 
 39  | 
 if (defined $negation)  | 
 
| 
619
 | 
 0  | 
 40  | 
 if (defined $cardinality)  | 
 
| 
627
 | 
 0  | 
 40  | 
 if defined $alternative  | 
 
| 
628
 | 
 0  | 
 40  | 
 if scalar @$comments > 0 and not $self->testoption("stripallcomments")  | 
 
| 
637
 | 
 0  | 
 0  | 
 if ref $nonterminal ne "HASH"  | 
 
| 
643
 | 
 0  | 
 0  | 
 if (exists $nonterminal->{'rhs'})  | 
 
| 
669
 | 
 0  | 
 6  | 
 if ref $mxtoken ne "HASH"  | 
 
| 
670
 | 
 0  | 
 6  | 
 if $cardinality eq "?"  | 
 
| 
672
 | 
 0  | 
 6  | 
 if $cardinality =~ /[+*]\?/ and $self->testoption("shiftlazytogreedy")  | 
 
| 
673
 | 
 0  | 
 6  | 
 if $cardinality =~ /[+*]\?/  | 
 
| 
675
 | 
 1  | 
 5  | 
 unless defined $options  | 
 
| 
680
 | 
 5  | 
 1  | 
 if (exists $mxtoken->{'rhs'})  | 
 
| 
683
 | 
 0  | 
 5  | 
 if ref $rhs ne "HASH"  | 
 
| 
684
 | 
 0  | 
 5  | 
 if not exists $rhs->{'token'} or ref $rhs->{'token'} ne ""  | 
 
| 
686
 | 
 0  | 
 5  | 
 unless defined $self->checkMarpaRuleExists($rhs->{'token'})  | 
 
| 
690
 | 
 5  | 
 0  | 
 if ($abortatfirstlevel) { }  | 
 
| 
695
 | 
 0  | 
 5  | 
 unless $self->isSubrule($rulename, $subrulename)  | 
 
| 
698
 | 
 5  | 
 0  | 
 if ($cardinality ne "?")  | 
 
| 
711
 | 
 0  | 
 0  | 
 unless $self->isSubrule($rulename, $subrulename)  | 
 
| 
715
 | 
 0  | 
 0  | 
 if ($rc)  | 
 
| 
717
 | 
 0  | 
 0  | 
 if exists $rule->{'cardinality'}  | 
 
| 
726
 | 
 0  | 
 1  | 
 if (exists $mxtoken->{'type'} and $mxtoken->{'type'} eq "group")  | 
 
| 
727
 | 
 0  | 
 0  | 
 unless exists $mxtoken->{'list'}  | 
 
| 
731
 | 
 0  | 
 0  | 
 if ref $al ne "HASH" or not exists $al->{'list'}  | 
 
| 
734
 | 
 0  | 
 0  | 
 if exists $le->{'type'} and not $le->{'type'} =~ /literal|class/  | 
 
| 
741
 | 
 0  | 
 1  | 
 if (exists $mxtoken->{'type'} and $mxtoken->{'type'} eq "literal")  | 
 
| 
746
 | 
 1  | 
 0  | 
 if (exists $mxtoken->{'type'} and $mxtoken->{'type'} eq "class")  | 
 
| 
747
 | 
 0  | 
 1  | 
 if exists $mxtoken->{'cardinality'}  | 
 
| 
752
 | 
 0  | 
 0  | 
 if (exists $mxtoken->{'type'} and $mxtoken->{'type'} eq "negatedclass")  | 
 
| 
753
 | 
 0  | 
 0  | 
 if exists $mxtoken->{'cardinality'}  | 
 
| 
779
 | 
 17  | 
 6  | 
 if scalar @$alternativelists < 2  | 
 
| 
787
 | 
 0  | 
 17  | 
 if (not exists $branch->{'list'}) { }  | 
 
| 
794
 | 
 5  | 
 12  | 
 if (scalar @$branchlist > 1) { }  | 
 
| 
803
 | 
 4  | 
 8  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "literal")  | 
 
| 
807
 | 
 2  | 
 2  | 
 if (defined $literal) { }  | 
 
| 
812
 | 
 0  | 
 2  | 
 if $matchfound  | 
 
| 
820
 | 
 12  | 
 0  | 
 unless $matchfound  | 
 
| 
825
 | 
 6  | 
 0  | 
 unless $filtered  | 
 
| 
861
 | 
 37  | 
 23  | 
 if ref $e eq "HASH" and exists $e->{'rhs'} and not exists $e->{'token'}  | 
 
| 
862
 | 
 4  | 
 0  | 
 if ref $e eq "HASH" and exists $e->{'type'} and exists $e->{'definition'}  | 
 
| 
867
 | 
 0  | 
 60  | 
 if (exists $e->{'comment'} or exists $e->{'action'})  | 
 
| 
869
 | 
 0  | 
 0  | 
 if (exists $e->{'comment'} and not $self->testoption("stripallcomments"))  | 
 
| 
875
 | 
 0  | 
 0  | 
 if (exists $e->{'action'} and not $self->testoption("stripactions"))  | 
 
| 
877
 | 
 0  | 
 0  | 
 $self->testoption('embedactions') ? :  | 
 
| 
887
 | 
 0  | 
 60  | 
 if (ref $e eq "HASH" and not exists $e->{'token'})  | 
 
| 
889
 | 
 0  | 
 0  | 
 if exists $e->{'type'} and $e->{'type'} eq "regex"  | 
 
| 
895
 | 
 11  | 
 49  | 
 if (defined $alternative) { }  | 
 
| 
897
 | 
 11  | 
 0  | 
 if (scalar @$currentlist > 0)  | 
 
| 
908
 | 
 0  | 
 11  | 
 if ($self->testoption('buildkeywords') and $keywordfragment->{'status'} == 0 and $keyword =~ /^[a-z]/i) { }  | 
 
| 
918
 | 
 2  | 
 9  | 
 if $class4list->{'status'} != -1  | 
 
| 
919
 | 
 0  | 
 11  | 
 if exists $metalist->{'state'}  | 
 
| 
938
 | 
 12  | 
 37  | 
 if ($alternativelength > 1)  | 
 
| 
947
 | 
 21  | 
 39  | 
 if (ref $e->{'token'} eq '') { }  | 
 
| 
957
 | 
 0  | 
 39  | 
 if ref $e ne "HASH" or not exists $e->{'token'}  | 
 
| 
960
 | 
 0  | 
 39  | 
 if exists $mxelement->{'type'} and $mxelement->{'type'} eq "ignore"  | 
 
| 
963
 | 
 23  | 
 16  | 
 if defined $keywordfragment  | 
 
| 
969
 | 
 0  | 
 60  | 
 if (exists $mxelement->{'comments'})  | 
 
| 
974
 | 
 0  | 
 0  | 
 if scalar keys %$mxelement == 0  | 
 
| 
981
 | 
 31  | 
 29  | 
 unless defined $il  | 
 
| 
986
 | 
 0  | 
 60  | 
 if exists $mxelement->{'negation'}  | 
 
| 
988
 | 
 0  | 
 60  | 
 if (defined $negation)  | 
 
| 
997
 | 
 10  | 
 50  | 
 if (defined $cardinality)  | 
 
| 
1004
 | 
 1  | 
 9  | 
 if (scalar @$rhslist <= 1 and $self->retagSimpleRule($rulename, $mxelement, $cardinality, $context)) { }  | 
 
| 
1010
 | 
 0  | 
 1  | 
 if (defined $alternative and scalar @$rhslist > 1)  | 
 
| 
1029
 | 
 0  | 
 9  | 
 if ($cardinality ne "?" and not $self->retagSimpleRule($rulename, $mxelement, $cardinality, $context, {"abortatfirstlevel", "true"}))  | 
 
| 
1031
 | 
 0  | 
 0  | 
 if scalar @$rhslist > 1  | 
 
| 
1032
 | 
 0  | 
 0  | 
 if $cardinality ne "?"  | 
 
| 
1052
 | 
 26  | 
 34  | 
 if $alternativelength > 1  | 
 
| 
1059
 | 
 0  | 
 23  | 
 if ($self->testoption("buildkeywords") and $keywordfragment->{'status'} == 0 and $keywordfragment->{'value'} =~ /^[a-z]/i)  | 
 
| 
1070
 | 
 23  | 
 0  | 
 if (scalar @$currentlist > 0)  | 
 
| 
1073
 | 
 3  | 
 20  | 
 if $class4list->{'status'} != -1  | 
 
| 
1074
 | 
 1  | 
 22  | 
 if $groupisLexeme->{'status'} == 0  | 
 
| 
1075
 | 
 0  | 
 23  | 
 if exists $metalist->{'state'}  | 
 
| 
1082
 | 
 23  | 
 0  | 
 if $self->testoption("matchcaseinsensitive")  | 
 
| 
1087
 | 
 1  | 
 22  | 
 if $class4group->{'status'} != -1  | 
 
| 
1088
 | 
 1  | 
 22  | 
 if $groupisLexeme->{'status'} == 0  | 
 
| 
1101
 | 
 0  | 
 9  | 
 if ref $tokengroup ne "HASH" or not exists $tokengroup->{'definition'}  | 
 
| 
1124
 | 
 9  | 
 14  | 
 if (defined $rulestatus)  | 
 
| 
1129
 | 
 3  | 
 6  | 
 if ($rulestatus eq "inprogress")  | 
 
| 
1130
 | 
 6  | 
 0  | 
 if ($rulestatus eq "done")  | 
 
| 
1132
 | 
 0  | 
 0  | 
 if ($rulestatus eq "synthetic" and not $self->checkMarpaRuleExists($rulename))  | 
 
| 
1144
 | 
 3  | 
 6  | 
 if exists $mxrule->{'class4list'}  | 
 
| 
1153
 | 
 14  | 
 0  | 
 if (defined $rightside)  | 
 
| 
1155
 | 
 0  | 
 14  | 
 if ref $rightside ne "ARRAY"  | 
 
| 
1157
 | 
 9  | 
 5  | 
 if exists $rule->{'grammarstate'} and $rule->{'grammarstate'} eq "lexer"  | 
 
| 
1158
 | 
 6  | 
 8  | 
 if exists $rule->{'type'} and $rule->{'type'} eq "fragment"  | 
 
| 
1172
 | 
 9  | 
 5  | 
 if exists $rule->{'grammarstate'} and $rule->{'grammarstate'} eq "lexer"  | 
 
| 
1173
 | 
 6  | 
 8  | 
 if exists $rule->{'type'} and $rule->{'type'} eq "fragment"  | 
 
| 
1174
 | 
 1  | 
 13  | 
 if (exists $rule->{'redirect'})  | 
 
| 
1202
 | 
 4  | 
 17  | 
 if defined $keywordfragment  | 
 
| 
1238
 | 
 0  | 
 14  | 
 unless (exists $rule->{'generationstatus'})  | 
 
| 
1240
 | 
 0  | 
 0  | 
 unless ($status)  | 
 
| 
1248
 | 
 0  | 
 0  | 
 exists $rule->{'grammarstate'} && $rule->{'grammarstate'} =~ /lexer/i ? :  | 
 
| 
 | 
 0  | 
 0  | 
 exists $rule->{'isFragmentOrChild'} ? :  | 
 
| 
1253
 | 
 0  | 
 1  | 
 if $status  | 
 
| 
1272
 | 
 1  | 
 0  | 
 if (not exists $rule->{'generationstatus'} and exists $rule->{'redirect'})  | 
 
| 
1298
 | 
 0  | 
 1  | 
 unless exists $startrule->{'rightsides'}  | 
 
| 
1316
 | 
 1  | 
 0  | 
 if ($outputfile ne '-') { }  | 
 
| 
1319
 | 
 0  | 
 1  | 
 unless open $outf, ">$outputfile"  | 
 
| 
1333
 | 
 0  | 
 1  | 
 if $self->{'is_stdout'}  | 
 
| 
1340
 | 
 0  | 
 50  | 
 unless defined $s  | 
 
| 
1345
 | 
 1  | 
 49  | 
 if $pad < 0  | 
 
| 
1354
 | 
 0  | 
 0  | 
 if ref $comments ne "ARRAY"  | 
 
| 
1377
 | 
 0  | 
 39  | 
 if ref $token ne ""  | 
 
| 
1381
 | 
 0  | 
 39  | 
 if ($self->testoption("matchcaseinsensitive") and $self->isKeywordLetter($token, $rule))  | 
 
| 
1388
 | 
 0  | 
 39  | 
 if exists $rule->{'redirected'}  | 
 
| 
1397
 | 
 27  | 
 1  | 
 unless exists $rule->{'class4list'}  | 
 
| 
1433
 | 
 2  | 
 0  | 
 if (defined $fourmatch)  | 
 
| 
1434
 | 
 0  | 
 2  | 
 unless $fourmatch =~ /00([0-9A-Z][0-9A-Z])/i  | 
 
| 
1439
 | 
 0  | 
 0  | 
 if (defined $bracedmatch)  | 
 
| 
1440
 | 
 0  | 
 0  | 
 unless $bracedmatch =~ /0*([0-9A-Z]{2,2})/i  | 
 
| 
1474
 | 
 0  | 
 12  | 
 if ($classstring =~ /(\\[ux][0-9a-f]+)-(\\[ux][0-9a-f]+)(.*)$/i)  | 
 
| 
1481
 | 
 0  | 
 12  | 
 if ($classstring =~ /(\\[ux][0-9a-f]{2,4})(.*)$/i)  | 
 
| 
1487
 | 
 3  | 
 9  | 
 if ($classstring =~ /([^-])-([^-])(.*)$/)  | 
 
| 
1491
 | 
 2  | 
 0  | 
 unless (exists $$classhash{lc $key} or exists $$classhash{uc $key})  | 
 
| 
1495
 | 
 1  | 
 1  | 
 if $beg =~ /[a-z]/i or $end =~ /[a-z]/i  | 
 
| 
1500
 | 
 1  | 
 8  | 
 if ($classstring =~ /(\\.)(.*)$/)  | 
 
| 
1502
 | 
 1  | 
 0  | 
 unless (exists $characterhash->{$c})  | 
 
| 
1510
 | 
 8  | 
 0  | 
 if ($classstring =~ /(.)(.*)$/)  | 
 
| 
1512
 | 
 7  | 
 1  | 
 unless (exists $$characterhash{lc $c} or exists $$characterhash{uc $c})  | 
 
| 
1516
 | 
 6  | 
 1  | 
 if $c =~ /^[a-z]$/i  | 
 
| 
1531
 | 
 21  | 
 8  | 
 unless $literal =~ /[a-z]/i  | 
 
| 
1538
 | 
 4  | 
 39  | 
 if ($literal =~ /(\\.)(.*)$/)  | 
 
| 
1543
 | 
 39  | 
 0  | 
 if ($literal =~ /(.)(.*)$/)  | 
 
| 
1546
 | 
 25  | 
 14  | 
 if $c =~ /^[a-z]$/i  | 
 
| 
1569
 | 
 1  | 
 68  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "negatedclass")  | 
 
| 
1570
 | 
 0  | 
 1  | 
 unless exists $rhs->{'value'}  | 
 
| 
1576
 | 
 0  | 
 68  | 
 if (exists $rhs->{'deletedafterconversiontoclass'})  | 
 
| 
1580
 | 
 0  | 
 68  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "unsupported")  | 
 
| 
1584
 | 
 8  | 
 60  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "class")  | 
 
| 
1588
 | 
 3  | 
 5  | 
 if ($self->testoption("matchcaseinsensitive") and $self->isAlphaLiteral($value))  | 
 
| 
1592
 | 
 3  | 
 0  | 
 if $normclass->{'isalphaclass'}  | 
 
| 
1597
 | 
 21  | 
 39  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "literal")  | 
 
| 
1600
 | 
 0  | 
 21  | 
 $literal eq q[\\'] ? :  | 
 
| 
1601
 | 
 4  | 
 17  | 
 if ($self->testoption("matchcaseinsensitive") and $self->isAlphaLiteral($literal))  | 
 
| 
1609
 | 
 0  | 
 39  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "action")  | 
 
| 
1614
 | 
 39  | 
 0  | 
 if (exists $rhs->{'rhs'})  | 
 
| 
1616
 | 
 0  | 
 39  | 
 if not exists $rhs->{'token'} or ref $rhs->{'token'} ne ""  | 
 
| 
1620
 | 
 0  | 
 0  | 
 if (exists $rhs->{'token'})  | 
 
| 
1624
 | 
 0  | 
 0  | 
 if (exists $rhs->{'comments'})  | 
 
| 
1649
 | 
 0  | 
 69  | 
 unless exists $options->{'status'}  | 
 
| 
1654
 | 
 0  | 
 69  | 
 if exists $rhs->{'discard'}  | 
 
| 
1656
 | 
 0  | 
 69  | 
 if ref $options ne "HASH" or not exists $options->{'delimiter'}  | 
 
| 
1661
 | 
 10  | 
 59  | 
 if exists $options->{'cardinality'}  | 
 
| 
1662
 | 
 0  | 
 69  | 
 if $cardinality =~ /[+*]\?/ and $self->testoption("shiftlazytogreedy")  | 
 
| 
1663
 | 
 0  | 
 69  | 
 if $cardinality =~ /[+*]\?/  | 
 
| 
1671
 | 
 40  | 
 29  | 
 if exists $options->{'assignop'}  | 
 
| 
1676
 | 
 4  | 
 65  | 
 if (defined $cardinality and $cardinality eq "?")  | 
 
| 
1684
 | 
 32  | 
 37  | 
 if ($status == 0)  | 
 
| 
1688
 | 
 11  | 
 26  | 
 if ($status == 1)  | 
 
| 
1692
 | 
 26  | 
 0  | 
 if ($status == 2)  | 
 
| 
1720
 | 
 0  | 
 22  | 
 unless exists $rule->{'list'}  | 
 
| 
1727
 | 
 0  | 
 33  | 
 unless exists $rulelist->{'list'}  | 
 
| 
1729
 | 
 0  | 
 33  | 
 if (exists $rulelist->{'metalist'})  | 
 
| 
1735
 | 
 0  | 
 0  | 
 if ref $cl eq "ARRAY"  | 
 
| 
1738
 | 
 0  | 
 0  | 
 if (exists $metalist->{'actions'})  | 
 
| 
1740
 | 
 0  | 
 0  | 
 if (not $self->testoption('embedactions')) { }  | 
 
| 
1744
 | 
 0  | 
 0  | 
 if ref $cl eq "ARRAY"  | 
 
| 
1753
 | 
 0  | 
 0  | 
 if ref $cl eq "ARRAY"  | 
 
| 
1765
 | 
 1  | 
 58  | 
 if exists $rhs->{'cardinality'}  | 
 
| 
1768
 | 
 1  | 
 58  | 
 if defined $cardinality  | 
 
| 
1770
 | 
 0  | 
 59  | 
 if (exists $rhs->{'comments'})  | 
 
| 
1780
 | 
 0  | 
 0  | 
 if (exists $rhs->{'type'} and $rhs->{'type'} eq "group" and exists $rhs->{'list'})  | 
 
| 
1781
 | 
 0  | 
 0  | 
 if (exists $rhs->{'class4list'}) { }  | 
 
| 
1801
 | 
 0  | 
 59  | 
 if ($linelen + length($nextclause) > $self->{'indent'} + 3 + 125) { }  | 
 
| 
1813
 | 
 0  | 
 33  | 
 if (defined $actiontext)  | 
 
| 
1816
 | 
 0  | 
 0  | 
 if $padlen < 0  | 
 
| 
1822
 | 
 33  | 
 0  | 
 if length $outputline > 0  | 
 
| 
1826
 | 
 0  | 
 22  | 
 if (exists $options->{'comments'})  | 
 
| 
1845
 | 
 0  | 
 32  | 
 if $self->{'verbosity'}  | 
 
| 
1856
 | 
 9  | 
 23  | 
 if exists $rule->{'cardinality'}  | 
 
| 
1859
 | 
 9  | 
 23  | 
 if defined $cardinality  | 
 
| 
1860
 | 
 18  | 
 9  | 
 if exists $rule->{'isLexeme'} or exists $rule->{'isFragmentOrChild'} or exists $rule->{'grammarstate'}  | 
 
| 
1873
 | 
 0  | 
 32  | 
 if ($self->testoption("buildkeywords") and $self->isKeywordLetter($rulename, $rule))  | 
 
| 
1882
 | 
 1  | 
 31  | 
 if ($self->testoption("fragment2class") and not $rulename =~ /^opt_/ and fragmentEligible2Convert($rule))  | 
 
| 
1889
 | 
 22  | 
 9  | 
 if (exists $rule->{'list'})  | 
 
| 
1898
 | 
 0  | 
 9  | 
 unless length $outputline  | 
 
| 
1903
 | 
 9  | 
 23  | 
 if length $outputline > 0  | 
 
| 
1930
 | 
 0  | 
 14  | 
 unless defined $rule and exists $rule->{'name'} and exists $rule->{'generationstatus'}  | 
 
| 
1932
 | 
 1  | 
 13  | 
 if length $rulename > $indent  | 
 
| 
1933
 | 
 6  | 
 8  | 
 unless exists $subrules->{$rulename}  | 
 
| 
1936
 | 
 3  | 
 15  | 
 if length $subrulename > $indent  | 
 
| 
1940
 | 
 0  | 
 1  | 
 if $indent == -1  | 
 
| 
1957
 | 
 0  | 
 1  | 
 unless defined $startrule  | 
 
| 
1968
 | 
 0  | 
 1  | 
 if not exists $self->{'discarded'} or ref $self->{'discarded'} ne "ARRAY" or scalar @{$self->{'discarded'};} < 1  | 
 
| 
2026
 | 
 0  | 
 16  | 
 if (exists $rule->{'comment'} and not $self->testoption("stripallcomments"))  | 
 
| 
2029
 | 
 0  | 
 0  | 
 if ref $comment ne "ARRAY"  | 
 
| 
2037
 | 
 2  | 
 14  | 
 unless defined $rule and exists $rule->{'name'} and exists $rule->{'generationstatus'}  | 
 
| 
2041
 | 
 1  | 
 13  | 
 unless ($status)  | 
 
| 
2043
 | 
 0  | 
 1  | 
 if $rulename ne $startrulename  | 
 
| 
2050
 | 
 4  | 
 4  | 
 if exists $subrules->{$rulename} and not $subrulestatus and $rulegeneratedoutput  | 
 
| 
2058
 | 
 8  | 
 6  | 
 if (exists $subrules->{$rulename})  | 
 
| 
2067
 | 
 8  | 
 0  | 
 if $subrulegeneratedoutput  | 
 
| 
2078
 | 
 18  | 
 14  | 
 unless exists $g4rule->{'generationstatus'}  | 
 
| 
2081
 | 
 14  | 
 0  | 
 if exists $marparule->{'status'}  | 
 
| 
2083
 | 
 0  | 
 0  | 
 if $self->{'verbosity'}  | 
 
| 
2101
 | 
 0  | 
 1  | 
 if $self->{'verbosity'} > 1  |