File Coverage

blib/lib/JSON/Transform/Grammar.pm
Criterion Covered Total %
statement 13 13 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod 1 1 100.0
total 19 19 100.0


line stmt bran cond sub pod time code
1             package JSON::Transform::Grammar;
2              
3 2     2   15 use strict;
  2         4  
  2         58  
4 2     2   10 use warnings;
  2         3  
  2         69  
5 2     2   12 use base 'Pegex::Grammar';
  2         5  
  2         877  
6 2     2   4952 use constant file => './json-transform.pgx';
  2         5  
  2         3006  
7              
8             =head1 NAME
9              
10             JSON::Transform::Grammar - JSON::Transform grammar
11              
12             =head1 SYNOPSIS
13              
14             use Pegex::Parser;
15             use JSON::Transform::Grammar;
16             use Pegex::Tree::Wrap;
17             use Pegex::Input;
18              
19             my $parser = Pegex::Parser->new(
20             grammar => JSON::Transform::Grammar->new,
21             receiver => Pegex::Tree::Wrap->new,
22             );
23             my $text = '"" <% [ $V+`id`:$K ]';
24             my $input = Pegex::Input->new(string => $text);
25             my $got = $parser->parse($input);
26              
27             =head1 DESCRIPTION
28              
29             This is a subclass of L, with the JSON::Transform grammar.
30              
31             =head1 METHODS
32              
33             =head2 make_tree
34              
35             Override method from L.
36              
37             =cut
38              
39             sub make_tree { # Generated/Inlined by Pegex::Grammar (0.67)
40             {
41 2     2 1 512 '+grammar' => 'json-transform',
42             '+include' => 'pegex-atoms',
43             '+toprule' => 'transforms',
44             '+version' => '0.01',
45             'colonPair' => {
46             '.all' => [
47             {
48             '-flat' => 1,
49             '.ref' => 'exprStringValue'
50             },
51             {
52             '-skip' => 1,
53             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*:(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
54             },
55             {
56             '.ref' => 'exprSingleValue'
57             }
58             ]
59             },
60             'exprArrayMapping' => {
61             '.all' => [
62             {
63             '-skip' => 1,
64             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\[(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
65             },
66             {
67             '.ref' => 'exprSingleValue'
68             },
69             {
70             '-skip' => 1,
71             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\](?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
72             }
73             ]
74             },
75             'exprKeyAdd' => {
76             '.all' => [
77             {
78             '-skip' => 1,
79             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\@(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
80             },
81             {
82             '-flat' => 1,
83             '.ref' => 'colonPair'
84             }
85             ]
86             },
87             'exprKeyRemove' => {
88             '.all' => [
89             {
90             '-skip' => 1,
91             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\#(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
92             },
93             {
94             '-flat' => 1,
95             '.ref' => 'exprStringValue'
96             }
97             ]
98             },
99             'exprMapping' => {
100             '.all' => [
101             {
102             '-wrap' => 1,
103             '.ref' => 'opFrom'
104             },
105             {
106             '.any' => [
107             {
108             '.ref' => 'exprArrayMapping'
109             },
110             {
111             '.ref' => 'exprObjectMapping'
112             },
113             {
114             '.ref' => 'exprSingleValue'
115             }
116             ]
117             }
118             ]
119             },
120             'exprObjectMapping' => {
121             '.all' => [
122             {
123             '-skip' => 1,
124             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\{(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
125             },
126             {
127             '-flat' => 1,
128             '.ref' => 'colonPair'
129             },
130             {
131             '-skip' => 1,
132             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\}(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
133             }
134             ]
135             },
136             'exprSingleValue' => {
137             '.all' => [
138             {
139             '.any' => [
140             {
141             '.ref' => 'jsonPointer'
142             },
143             {
144             '.ref' => 'variableUser'
145             },
146             {
147             '.ref' => 'variableSystem'
148             }
149             ]
150             },
151             {
152             '+max' => 1,
153             '-flat' => 1,
154             '.ref' => 'singleValueMod'
155             }
156             ]
157             },
158             'exprStringQuoted' => {
159             '.all' => [
160             {
161             '-skip' => 1,
162             '.rgx' => qr/\G`/
163             },
164             {
165             '+min' => 0,
166             '.any' => [
167             {
168             '.ref' => 'jsonUnicode'
169             },
170             {
171             '.ref' => 'jsonBackslashQuote'
172             },
173             {
174             '.ref' => 'jsonBackslashDollar'
175             },
176             {
177             '.ref' => 'jsonBackslashGrave'
178             },
179             {
180             '.ref' => 'variableUser'
181             },
182             {
183             '.ref' => 'variableSystem'
184             },
185             {
186             '.ref' => 'jsonOtherNotGrave'
187             }
188             ]
189             },
190             {
191             '-skip' => 1,
192             '.rgx' => qr/\G`/
193             }
194             ]
195             },
196             'exprStringValue' => {
197             '.any' => [
198             {
199             '.ref' => 'jsonPointer'
200             },
201             {
202             '.ref' => 'variableUser'
203             },
204             {
205             '.ref' => 'variableSystem'
206             },
207             {
208             '.ref' => 'exprStringQuoted'
209             }
210             ]
211             },
212             'jsonBackslashDollar' => {
213             '.rgx' => qr/\G(\\\$)/
214             },
215             'jsonBackslashDouble' => {
216             '.rgx' => qr/\G(\\")/
217             },
218             'jsonBackslashGrave' => {
219             '.rgx' => qr/\G(\\`)/
220             },
221             'jsonBackslashQuote' => {
222             '.rgx' => qr/\G(\\[\\\/bfnrt])/
223             },
224             'jsonOtherNotDouble' => {
225             '.rgx' => qr/\G([^"\x00-\x1f\\\$]+)/
226             },
227             'jsonOtherNotGrave' => {
228             '.rgx' => qr/\G([^`\x00-\x1f\\\$]+)/
229             },
230             'jsonPointer' => {
231             '.all' => [
232             {
233             '-skip' => 1,
234             '.rgx' => qr/\G"/
235             },
236             {
237             '+min' => 0,
238             '.any' => [
239             {
240             '.ref' => 'jsonUnicode'
241             },
242             {
243             '.ref' => 'jsonBackslashQuote'
244             },
245             {
246             '.ref' => 'jsonBackslashDollar'
247             },
248             {
249             '.ref' => 'jsonBackslashDouble'
250             },
251             {
252             '.ref' => 'variableUser'
253             },
254             {
255             '.ref' => 'variableSystem'
256             },
257             {
258             '.ref' => 'jsonOtherNotDouble'
259             }
260             ]
261             },
262             {
263             '-skip' => 1,
264             '.rgx' => qr/\G"/
265             }
266             ]
267             },
268             'jsonUnicode' => {
269             '.rgx' => qr/\G(\\u[0-9a-fA-F]{4})/
270             },
271             'opArrayFrom' => {
272             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*(<\@)(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
273             },
274             'opCopyFrom' => {
275             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*(<\-)(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
276             },
277             'opFrom' => {
278             '.any' => [
279             {
280             '.ref' => 'opArrayFrom'
281             },
282             {
283             '.ref' => 'opObjectFrom'
284             }
285             ]
286             },
287             'opMoveFrom' => {
288             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*(<<)(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
289             },
290             'opObjectFrom' => {
291             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*(<%)(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
292             },
293             'singleValueMod' => {
294             '.any' => [
295             {
296             '.ref' => 'exprKeyAdd'
297             },
298             {
299             '.ref' => 'exprKeyRemove'
300             }
301             ]
302             },
303             'transformCopy' => {
304             '.all' => [
305             {
306             '.any' => [
307             {
308             '.ref' => 'jsonPointer'
309             },
310             {
311             '.ref' => 'variableUser'
312             }
313             ]
314             },
315             {
316             '-skip' => 1,
317             '.ref' => 'opCopyFrom'
318             },
319             {
320             '-flat' => 1,
321             '.ref' => 'exprSingleValue'
322             },
323             {
324             '+max' => 1,
325             '.ref' => 'exprMapping'
326             }
327             ]
328             },
329             'transformImpliedDest' => {
330             '.all' => [
331             {
332             '.ref' => 'jsonPointer'
333             },
334             {
335             '.ref' => 'exprMapping'
336             }
337             ]
338             },
339             'transformMove' => {
340             '.all' => [
341             {
342             '.ref' => 'jsonPointer'
343             },
344             {
345             '-skip' => 1,
346             '.ref' => 'opMoveFrom'
347             },
348             {
349             '.ref' => 'jsonPointer'
350             }
351             ]
352             },
353             'transformation' => {
354             '.all' => [
355             {
356             '-skip' => 1,
357             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
358             },
359             {
360             '.any' => [
361             {
362             '.ref' => 'transformImpliedDest'
363             },
364             {
365             '.ref' => 'transformCopy'
366             },
367             {
368             '.ref' => 'transformMove'
369             },
370             {
371             '-skip' => 1,
372             '.ref' => 'ws2'
373             }
374             ]
375             },
376             {
377             '-skip' => 1,
378             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*/
379             }
380             ]
381             },
382             'transforms' => {
383             '+min' => 1,
384             '-flat' => 1,
385             '.ref' => 'transformation'
386             },
387             'variableSystem' => {
388             '.all' => [
389             {
390             '-skip' => 1,
391             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\$/
392             },
393             {
394             '.rgx' => qr/\G([A-Z]*)/
395             }
396             ]
397             },
398             'variableUser' => {
399             '.all' => [
400             {
401             '-skip' => 1,
402             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))*\$/
403             },
404             {
405             '.rgx' => qr/\G([a-z][a-zA-Z]*)/
406             }
407             ]
408             },
409             'ws2' => {
410             '.rgx' => qr/\G(?:\s|\x{FEFF}|[\ \t]*\-\-[\ \t]*[^\r\n]*(?:\r?\n|\r!NL|\z))+/
411             }
412             }
413             }
414              
415             1;