File Coverage

blib/lib/Pegex/Crontab/Grammar.pm
Criterion Covered Total %
statement 7 7 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod 1 1 100.0
total 11 11 100.0


line stmt bran cond sub pod time code
1             package Pegex::Crontab::Grammar;
2 2     2   11 use Pegex::Base;
  2         4  
  2         15  
3             extends 'Pegex::Grammar';
4              
5 2     2   14200 use constant file => '../crontab-pgx/crontab.pgx';
  2         6  
  2         1704  
6              
7             sub make_tree {
8             {
9 1     1 1 431 '+toprule' => 'crontab',
10             'EOL' => {
11             '.rgx' => qr/\G\r?\n/
12             },
13             '__' => {
14             '.rgx' => qr/\G\s+/
15             },
16             'blank_line' => {
17             '.rgx' => qr/\G[\ \t]*\r?\n/
18             },
19             'command' => {
20             '.rgx' => qr/\G(.*)/
21             },
22             'comment_line' => {
23             '.rgx' => qr/\G[\ \t]*\#.*\r?\n/
24             },
25             'cron_line' => {
26             '.all' => [
27             {
28             '.ref' => 'minute'
29             },
30             {
31             '.ref' => '__'
32             },
33             {
34             '.ref' => 'hour'
35             },
36             {
37             '.ref' => '__'
38             },
39             {
40             '.ref' => 'dom'
41             },
42             {
43             '.ref' => '__'
44             },
45             {
46             '.ref' => 'month'
47             },
48             {
49             '.ref' => '__'
50             },
51             {
52             '.ref' => 'dow'
53             },
54             {
55             '.ref' => '__'
56             },
57             {
58             '.ref' => 'command'
59             },
60             {
61             '.ref' => 'EOL'
62             }
63             ]
64             },
65             'crontab' => {
66             '+min' => 0,
67             '.any' => [
68             {
69             '.ref' => 'comment_line'
70             },
71             {
72             '.ref' => 'blank_line'
73             },
74             {
75             '.ref' => 'env_line'
76             },
77             {
78             '.ref' => 'cron_line'
79             }
80             ]
81             },
82             'dom' => {
83             '.ref' => 'time'
84             },
85             'dow' => {
86             '.ref' => 'time'
87             },
88             'env_line' => {
89             '.all' => [
90             {
91             '.ref' => 'variable'
92             },
93             {
94             '.rgx' => qr/\G=/
95             },
96             {
97             '.ref' => 'value'
98             },
99             {
100             '.ref' => 'EOL'
101             }
102             ]
103             },
104             'hour' => {
105             '.ref' => 'time'
106             },
107             'minute' => {
108             '.ref' => 'time'
109             },
110             'month' => {
111             '.ref' => 'time'
112             },
113             'time' => {
114             '.rgx' => qr/\G(\*|(?:(?:[0-9]{1,2})\-(?:[0-9]{1,2})(?:\/(?:[0-9]{1,2}))?|(?:[0-9]{1,2}))(?:,(?:(?:[0-9]{1,2})\-(?:[0-9]{1,2})(?:\/(?:[0-9]{1,2}))?|(?:[0-9]{1,2})))+,?|(?:[0-9]{1,2})\-(?:[0-9]{1,2})(?:\/(?:[0-9]{1,2}))?|(?:mon|tue|wed|thu|fri|sat|sun)|(?:[0-9]{1,2}))/
115             },
116             'value' => {
117             '.rgx' => qr/\G(.*)/
118             },
119             'variable' => {
120             '.rgx' => qr/\G(\w+)/
121             }
122             }
123             }
124              
125             1;