1#!inc/bin/testml-cpan
2
3
4parse-to-tree(*grammar, *input).yaml.clean == *tree
5  :"+ - Pegex::Tree"
6
7parse-to-tree-wrap(*grammar, *input).yaml.clean == *wrap
8  :"+ - Pegex::Tree::Wrap"
9
10parse-to-tree-test(*grammar, *input).yaml.clean == *ast
11  :"+ - t::TestAST"
12
13
14=== Single Regex - Single Capture
15--- grammar
16a: /x*(y*)z* EOL/
17--- input
18xxxyyyyzzz
19--- tree
20yyyy
21--- wrap
22a: yyyy
23
24
25=== Single Regex - Multi Capture
26--- grammar
27a: /(x*)(y*)(z*) EOL/
28--- input
29xxxyyyyzzz
30--- tree
31- xxx
32- yyyy
33- zzz
34--- wrap
35a:
36- xxx
37- yyyy
38- zzz
39
40
41=== Multi Group Regex
42--- grammar
43t: /.*(x).*(y).*(z).*/
44--- input: aaaxbbbyccczddd
45--- tree
46- x
47- y
48- z
49--- wrap
50t:
51- x
52- y
53- z
54
55
56=== Single Regex - No Capture
57--- grammar
58a: /x*y*z* EOL/
59--- input
60xxxyyyyzzz
61--- tree
62[]
63--- wrap
64a: []
65
66
67=== Non capture Regex
68--- grammar
69a: b b* -c* .d*
70b: /b/
71c: /c+/
72d: /d/
73--- input: bbccdd
74--- tree
75- []
76--- wrap
77a:
78- []
79
80
81=== A subrule
82--- grammar
83a: b /(y+)/ EOL
84b: /(x+)/
85--- input
86xxxyyyy
87--- tree
88- xxx
89- yyyy
90--- wrap
91a:
92- b: xxx
93- yyyy
94
95
96=== Multi match regex in subrule
97--- grammar
98a: b
99b: /(x*)y*(z*) EOL/
100--- input
101xxxyyyyzzz
102--- tree
103- xxx
104- zzz
105--- wrap
106a:
107  b:
108  - xxx
109  - zzz
110
111
112=== Any rule group
113--- grammar
114a: (b | c)
115b: /(bleh)/
116c: /(x*)y*(z*) EOL?/
117--- input
118xxxyyyyzzz
119--- tree
120- xxx
121- zzz
122--- wrap
123a:
124  c:
125  - xxx
126  - zzz
127
128
129=== + Modifier
130--- grammar
131a: ( b c )+ EOL
132b: /(x*)/
133c: /(y+)/
134--- input
135xxyyxy
136--- tree
137- - - xx
138    - yy
139  - - x
140    - y
141--- wrap
142a:
143- - - b: xx
144    - c: yy
145  - - b: x
146    - c: y
147
148
149=== Wrap Pass and Skip
150--- grammar
151a: +b -c .d
152b: /(b+)/
153c: /(c+)/
154d: /(d+)/
155--- input: bbccdd
156--- tree
157- b: bb
158- cc
159--- wrap
160a:
161- b: bb
162- c: cc
163
164
165=== Flat and Skip Multi
166--- grammar
167a: b* -c* .d*
168b: /(b)/
169c: /(c)/
170d: /(d)/
171--- input: bccdd
172--- tree
173- - b
174- c
175- c
176--- wrap
177a:
178- - b: b
179- c: c
180- c: c
181
182
183=== Skip Bracketed
184--- grammar
185a: b .(c d)
186b: /(b)/
187c: /(c+)/
188d: /(d+)/
189--- input: bcccd
190--- tree
191b
192--- wrap
193a:
194  b: b
195
196
197=== Assertions
198--- grammar
199a: !b =c c
200b: /b/
201c: /(c+)/
202--- input: ccc
203--- tree
204ccc
205--- wrap
206a:
207  c: ccc
208
209
210=== Assertion not captured
211--- grammar
212a: =x x y EOL
213x: /(x+)/
214y: /(y+)/
215--- input
216xxxyyyy
217--- tree
218- xxx
219- yyyy
220--- wrap
221a:
222- x: xxx
223- y: yyyy
224
225
226=== Empty regex group plus rule
227--- grammar
228a: b* c EOL
229b: /xxx/
230c: /(yyy)/
231--- input
232xxxyyy
233--- tree
234- []
235- yyy
236--- wrap
237a:
238- []
239- c: yyy
240
241
242=== Rule to Rule to Rule
243--- grammar
244a: b
245b: c*
246c: d EOL
247d: /x(y)z/
248--- input
249xyz
250xyz
251--- tree
252- - y
253- - y
254--- wrap
255a:
256  b:
257  - c:
258    - d: y
259  - c:
260    - d: y
261
262
263=== List and Separators
264--- grammar
265a: b c+ % d
266b: /(b)/
267c: /(c+)/
268d: /(d+)/
269--- input: bcccdccddc
270--- tree
271- b
272- - ccc
273  - d
274  - cc
275  - dd
276  - c
277--- wrap
278a:
279- b: b
280- - c: ccc
281  - d: d
282  - c: cc
283  - d: dd
284  - c: c
285
286
287=== Rule with Separator
288--- grammar
289a: c* % d
290c: /(c+)/
291d: /d+/
292--- input: cccdccddc
293--- tree
294- ccc
295- cc
296- c
297--- wrap
298a:
299- c: ccc
300- c: cc
301- c: c
302
303
304=== List without Separators
305--- grammar
306a: b c* % d b
307b: /(b)/
308c: /(c+)/
309d: /d+/
310--- input: bb
311--- tree
312- b
313- []
314- b
315--- wrap
316a:
317- b: b
318- []
319- b: b
320
321
322=== Whitespace Matchers
323--- grammar
324TOP: / ws*( DOT ) - ( DOT* ) -/
325--- input
326  .
327     ..
328
329--- tree
330- .
331- ..
332--- wrap
333TOP:
334- .
335- ..
336
337
338=== Automatically Pass TOP
339--- grammar
340b: /(b)/
341TOP: b c*
342c: /(c)/
343--- input: bcc
344--- tree
345- b
346- - c
347  - c
348--- wrap
349TOP:
350- b: b
351- - c: c
352  - c: c
353
354
355=== Empty Stars
356--- grammar
357a: ( b* c )+ b*
358b: /(b)/
359c: /(c+)/
360--- input: cc
361--- tree
362- - - []
363    - cc
364- []
365--- wrap
366a:
367- - - []
368    - c: cc
369- []
370
371
372=== Exact Quantifier
373--- grammar
374a: <b>3
375b: /(b)/
376--- input: bbb
377--- tree
378- b
379- b
380- b
381--- wrap
382a:
383- b: b
384- b: b
385- b: b
386
387
388=== Quantifier with Separator
389--- grammar
390a: <b>2-4 %% /,/
391b: /(b)/
392--- input: b,b,b,
393--- tree
394- b
395- b
396- b
397--- wrap
398a:
399- b: b
400- b: b
401- b: b
402
403
404=== Quantifier with Separator, Trailing OK
405--- grammar
406a: <b>2-4 %% /,/
407b: /(b)/
408--- input: b,b,b,
409--- tree
410- b
411- b
412- b
413--- wrap
414a:
415- b: b
416- b: b
417- b: b
418
419
420=== Quantifier on the Separator
421--- grammar
422a: <b>2-4 %% c*
423b: /(b)/
424c: / COMMA /
425--- input: b,b,,,,bb,
426--- tree
427- b
428- []
429- b
430- []
431- b
432- []
433- b
434--- wrap
435a:
436- b: b
437- []
438- b: b
439- []
440- b: b
441- []
442- b: b
443
444
445=== Tilde matching
446--- grammar
447a: - b + b+
448b: /(b)/
449c: / COMMA /
450--- input: b  bb
451--- tree
452- b
453- - b
454  - b
455--- wrap
456a:
457- b: b
458- - b: b
459  - b: b
460
461
462=== False Values
463--- grammar
464a: zero empty undef
465zero: /(b+)/
466empty: /(c+)/
467undef: /(d+)/
468--- input: bbccdd
469--- ast
470- 0
471- ''
472- null
473
474
475=== Wrap
476--- grammar
477a: b c d
478b: /(b+)/
479c: /(c+)/
480d: /(d+)/
481--- input: bbccdd
482--- wrap
483a:
484- b: bb
485- c: cc
486- d: dd
487
488
489=== 2 + 1
490--- SKIP
491--- grammar
492a: <b>2 b
493b: /(b)/
494--- input: bbb
495--- ast
496- b
497- b
498- b
499
500
501=== Separated Group
502--- grammar
503a: (b | c)+ % d
504b: /(b)/
505c: /(c)/
506d: /(d)/
507--- input: bdcdb
508--- ast
509- b
510- d
511- c
512- d
513- b
514
515
516=== Separator Group
517--- grammar
518a: b+ %% (c | d)
519b: /(b)/
520c: /(c)/
521d: /(d)/
522--- input: bdbcbc
523--- ast
524- b
525- d
526- b
527- c
528- b
529- c
530