treetop 1.5.3 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -13
- data/Rakefile +9 -3
- data/doc/pitfalls_and_advanced_techniques.markdown +1 -1
- data/doc/sitegen.rb +1 -1
- data/doc/syntactic_recognition.markdown +2 -0
- data/doc/tt.1 +1 -1
- data/lib/treetop/compiler/metagrammar.rb +81 -13
- data/lib/treetop/compiler/metagrammar.treetop +67 -13
- data/lib/treetop/compiler/node_classes/anything_symbol.rb +5 -1
- data/lib/treetop/compiler/node_classes/character_class.rb +6 -2
- data/lib/treetop/compiler/node_classes/choice.rb +9 -5
- data/lib/treetop/compiler/node_classes/nonterminal.rb +2 -2
- data/lib/treetop/compiler/node_classes/parenthesized_expression.rb +5 -1
- data/lib/treetop/compiler/node_classes/parsing_expression.rb +12 -2
- data/lib/treetop/compiler/node_classes/predicate.rb +8 -1
- data/lib/treetop/compiler/node_classes/predicate_block.rb +7 -0
- data/lib/treetop/compiler/node_classes/repetition.rb +31 -11
- data/lib/treetop/compiler/node_classes/sequence.rb +5 -1
- data/lib/treetop/compiler/node_classes/terminal.rb +12 -2
- data/lib/treetop/runtime/compiled_parser.rb +12 -6
- data/lib/treetop/runtime/syntax_node.rb +24 -15
- data/lib/treetop/runtime/terminal_parse_failure.rb +4 -3
- data/lib/treetop/version.rb +2 -2
- data/spec/compiler/and_predicate_spec.rb +1 -1
- data/spec/compiler/anything_symbol_spec.rb +4 -1
- data/spec/compiler/character_class_spec.rb +4 -1
- data/spec/compiler/choice_spec.rb +20 -11
- data/spec/compiler/failure_propagation_functional_spec.rb +1 -1
- data/spec/compiler/grammar_spec.rb +4 -1
- data/spec/compiler/not_predicate_spec.rb +20 -6
- data/spec/compiler/occurrence_range_spec.rb +25 -28
- data/spec/compiler/one_or_more_spec.rb +2 -2
- data/spec/compiler/optional_spec.rb +2 -2
- data/spec/compiler/parenthesized_expression_spec.rb +15 -1
- data/spec/compiler/semantic_predicate_spec.rb +17 -16
- data/spec/compiler/sequence_spec.rb +1 -1
- data/spec/compiler/terminal_spec.rb +8 -1
- data/spec/compiler/terminal_symbol_spec.rb +4 -1
- data/spec/compiler/zero_or_more_spec.rb +4 -2
- data/spec/runtime/compiled_parser_spec.rb +33 -3
- metadata +20 -21
- data/examples/lambda_calculus/lambda_calculus +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YTE1MTQyNWE0NDdkNTU1MmNiYWFiZWU2NDA3ZjJkYmUzNGU5ZmI3ZA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4c3093c759c685e5241eea8e6ca42dd46d2719bc
|
4
|
+
data.tar.gz: 35c028a9353519e0865b5c1a82cbae4a307abb45
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NTk1ZmIyMzMxZDczNWIxYTZhNDEyMjMxMzQ5OGIyYmM4MWE1NjY2MTRjOTg0
|
11
|
-
ZmE5MGJiYzZhZjRjOTAzZjc2YTVlMGQ5Y2U2ZGVlMGE5MjgxZTI=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
M2MzNmM5ZjI0MDJhMmE3NDk5MTMzNjUyOTE4MDc0ZWZiNjBmZjE1ZTgxYzc4
|
14
|
-
MzA4NmVhZWQ0ZTliZjg3YWY1Mjc3ZGNiYmMyYTRmYzNjOGJiODM1Mzg1YjIz
|
15
|
-
NmU4YjYwMGJlNjgyNmM2MGNjYjY2MDU4MDIxNWMwOTA2Y2MxYWY=
|
6
|
+
metadata.gz: 698c86025e1979b76b0279d7f28b2897a04832e32fe40d5e4b7708fb573141cb9a1b0f8e159c3db2c74afb44932ae8deea4331838e60d32b5f58ba054d7bfcef
|
7
|
+
data.tar.gz: 921b6d4b7a5debb9fa9ed662f359f31ae511d5f4c83426ab07cff120d8b634660684a9fe43f6a0c13fd7362f95c5a0e59f50763edd073c73728ba8f5060fb343
|
data/Rakefile
CHANGED
@@ -54,9 +54,15 @@ end
|
|
54
54
|
|
55
55
|
desc 'Upload website files'
|
56
56
|
task :website_upload do
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
# The website is now done using gh-pages
|
58
|
+
system <<-END
|
59
|
+
git checkout gh-pages
|
60
|
+
cp website/*.html .
|
61
|
+
git add *.html
|
62
|
+
git commit -m"Website update `date`"
|
63
|
+
git push
|
64
|
+
git checkout master
|
65
|
+
END
|
60
66
|
end
|
61
67
|
|
62
68
|
desc 'Generate and upload website files'
|
@@ -30,7 +30,7 @@ Say I want to parse a diabolical wiki syntax in which the following interpretati
|
|
30
30
|
end
|
31
31
|
|
32
32
|
rule em
|
33
|
-
'
|
33
|
+
'*' (strong / !'*' . / '\*')+ '*'
|
34
34
|
end
|
35
35
|
|
36
36
|
Emphasized text is allowed within strong text by virtue of `em` being the first alternative. Since `em` will only successfully parse if a matching `*` is found, it is permitted, but other than that, no `*` characters are allowed unless they are escaped.
|
data/doc/sitegen.rb
CHANGED
@@ -39,6 +39,8 @@ Treetop will emit a module called `GrammarName` and a parser class called `Gramm
|
|
39
39
|
#Parsing Expressions
|
40
40
|
Each rule associates a name with a _parsing expression_. Parsing expressions are a generalization of vanilla regular expressions. Their key feature is the ability to reference other expressions in the grammar by name.
|
41
41
|
|
42
|
+
Treetop parsers will try to match the first rule defined in the grammar, unless you pass an optional parameter to set a different top rule.
|
43
|
+
|
42
44
|
##Terminal Symbols
|
43
45
|
###Strings
|
44
46
|
Strings are surrounded in double or single quotes and must be matched exactly.
|
data/doc/tt.1
CHANGED
@@ -21,7 +21,7 @@ module Treetop
|
|
21
21
|
elements[0]
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
24
|
+
def spacing
|
25
25
|
elements[1]
|
26
26
|
end
|
27
27
|
|
@@ -36,7 +36,7 @@ module Treetop
|
|
36
36
|
|
37
37
|
module TreetopFile2
|
38
38
|
def compile
|
39
|
-
requires.text_value +
|
39
|
+
requires.text_value + spacing.text_value + module_or_grammar.compile + suffix.text_value
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -118,7 +118,7 @@ module Treetop
|
|
118
118
|
end
|
119
119
|
|
120
120
|
module RequireStatement0
|
121
|
-
def
|
121
|
+
def spacing
|
122
122
|
elements[0]
|
123
123
|
end
|
124
124
|
|
@@ -159,6 +159,7 @@ module Treetop
|
|
159
159
|
r5 = true
|
160
160
|
@index += 1
|
161
161
|
else
|
162
|
+
terminal_parse_failure('[ \\t]')
|
162
163
|
r5 = nil
|
163
164
|
end
|
164
165
|
if r5
|
@@ -181,6 +182,7 @@ module Treetop
|
|
181
182
|
r7 = true
|
182
183
|
@index += 1
|
183
184
|
else
|
185
|
+
terminal_parse_failure('[^\\n\\r]')
|
184
186
|
r7 = nil
|
185
187
|
end
|
186
188
|
if r7
|
@@ -201,6 +203,7 @@ module Treetop
|
|
201
203
|
r8 = true
|
202
204
|
@index += 1
|
203
205
|
else
|
206
|
+
terminal_parse_failure('[\\n\\r]')
|
204
207
|
r8 = nil
|
205
208
|
end
|
206
209
|
s0 << r8
|
@@ -281,7 +284,7 @@ module Treetop
|
|
281
284
|
end
|
282
285
|
|
283
286
|
module ModuleDeclaration4
|
284
|
-
def
|
287
|
+
def module_prefix
|
285
288
|
elements[0]
|
286
289
|
end
|
287
290
|
|
@@ -296,11 +299,11 @@ module Treetop
|
|
296
299
|
|
297
300
|
module ModuleDeclaration5
|
298
301
|
def compile
|
299
|
-
|
302
|
+
module_prefix.text_value + module_contents.compile + suffix.text_value
|
300
303
|
end
|
301
304
|
|
302
305
|
def parser_name
|
303
|
-
|
306
|
+
module_prefix.name.text_value+'::'+module_contents.parser_name
|
304
307
|
end
|
305
308
|
end
|
306
309
|
|
@@ -334,6 +337,7 @@ module Treetop
|
|
334
337
|
r5 = true
|
335
338
|
@index += 1
|
336
339
|
else
|
340
|
+
terminal_parse_failure('[A-Z]')
|
337
341
|
r5 = nil
|
338
342
|
end
|
339
343
|
s4 << r5
|
@@ -366,6 +370,7 @@ module Treetop
|
|
366
370
|
r11 = true
|
367
371
|
@index += 1
|
368
372
|
else
|
373
|
+
terminal_parse_failure('[A-Z]')
|
369
374
|
r11 = nil
|
370
375
|
end
|
371
376
|
s9 << r11
|
@@ -617,6 +622,7 @@ module Treetop
|
|
617
622
|
r1 = true
|
618
623
|
@index += 1
|
619
624
|
else
|
625
|
+
terminal_parse_failure('[A-Z]')
|
620
626
|
r1 = nil
|
621
627
|
end
|
622
628
|
s0 << r1
|
@@ -829,6 +835,7 @@ module Treetop
|
|
829
835
|
r3 = true
|
830
836
|
@index += 1
|
831
837
|
else
|
838
|
+
terminal_parse_failure('[A-Z]')
|
832
839
|
r3 = nil
|
833
840
|
end
|
834
841
|
s0 << r3
|
@@ -1064,6 +1071,10 @@ module Treetop
|
|
1064
1071
|
super.elements.map {|elt| elt.alternative}
|
1065
1072
|
end
|
1066
1073
|
|
1074
|
+
def parent_modules
|
1075
|
+
[]
|
1076
|
+
end
|
1077
|
+
|
1067
1078
|
def inline_modules
|
1068
1079
|
(alternatives.map {|alt| alt.inline_modules }).flatten
|
1069
1080
|
end
|
@@ -1171,10 +1182,14 @@ module Treetop
|
|
1171
1182
|
sequence_body.tail
|
1172
1183
|
end
|
1173
1184
|
|
1185
|
+
def parent_modules
|
1186
|
+
node_class_declarations.inline_modules
|
1187
|
+
end
|
1188
|
+
|
1174
1189
|
def inline_modules
|
1175
1190
|
(sequence_elements.map {|elt| elt.inline_modules}).flatten +
|
1176
1191
|
[sequence_element_accessor_module] +
|
1177
|
-
|
1192
|
+
parent_modules
|
1178
1193
|
end
|
1179
1194
|
|
1180
1195
|
def inline_module_name
|
@@ -1411,6 +1426,10 @@ module Treetop
|
|
1411
1426
|
atomic
|
1412
1427
|
end
|
1413
1428
|
|
1429
|
+
def parent_modules
|
1430
|
+
[]
|
1431
|
+
end
|
1432
|
+
|
1414
1433
|
def inline_modules
|
1415
1434
|
atomic.inline_modules
|
1416
1435
|
end
|
@@ -1425,7 +1444,7 @@ module Treetop
|
|
1425
1444
|
elements[0]
|
1426
1445
|
end
|
1427
1446
|
|
1428
|
-
def
|
1447
|
+
def atomic
|
1429
1448
|
elements[2]
|
1430
1449
|
end
|
1431
1450
|
end
|
@@ -1435,8 +1454,11 @@ module Treetop
|
|
1435
1454
|
prefix.compile(address, builder, self)
|
1436
1455
|
end
|
1437
1456
|
def prefixed_expression
|
1438
|
-
|
1457
|
+
atomic
|
1439
1458
|
end
|
1459
|
+
def parent_modules
|
1460
|
+
[]
|
1461
|
+
end
|
1440
1462
|
def inline_modules
|
1441
1463
|
[]
|
1442
1464
|
end
|
@@ -1458,6 +1480,7 @@ module Treetop
|
|
1458
1480
|
|
1459
1481
|
module Primary5
|
1460
1482
|
def compile(address, builder, parent_expression=nil)
|
1483
|
+
# debugger if node_class_declarations.inline_modules.size > 0 && atomic.inline_modules.size > 0
|
1461
1484
|
suffix.compile(address, builder, self)
|
1462
1485
|
end
|
1463
1486
|
|
@@ -1469,8 +1492,12 @@ module Treetop
|
|
1469
1492
|
node_class_declarations.node_class_name
|
1470
1493
|
end
|
1471
1494
|
|
1495
|
+
def parent_modules
|
1496
|
+
node_class_declarations.inline_modules
|
1497
|
+
end
|
1498
|
+
|
1472
1499
|
def inline_modules
|
1473
|
-
atomic.inline_modules +
|
1500
|
+
atomic.inline_modules + parent_modules
|
1474
1501
|
end
|
1475
1502
|
|
1476
1503
|
def inline_module_name
|
@@ -1490,6 +1517,7 @@ module Treetop
|
|
1490
1517
|
|
1491
1518
|
module Primary7
|
1492
1519
|
def compile(address, builder, parent_expression=nil)
|
1520
|
+
# debugger if node_class_declarations.inline_modules.size > 0 && atomic.inline_modules.size > 0
|
1493
1521
|
atomic.compile(address, builder, self)
|
1494
1522
|
end
|
1495
1523
|
|
@@ -1497,8 +1525,12 @@ module Treetop
|
|
1497
1525
|
node_class_declarations.node_class_name
|
1498
1526
|
end
|
1499
1527
|
|
1528
|
+
def parent_modules
|
1529
|
+
node_class_declarations.inline_modules
|
1530
|
+
end
|
1531
|
+
|
1500
1532
|
def inline_modules
|
1501
|
-
atomic.inline_modules +
|
1533
|
+
atomic.inline_modules + parent_modules
|
1502
1534
|
end
|
1503
1535
|
|
1504
1536
|
def inline_module_name
|
@@ -1666,6 +1698,10 @@ module Treetop
|
|
1666
1698
|
sequence_primary.compile(lexical_address, builder)
|
1667
1699
|
end
|
1668
1700
|
|
1701
|
+
def parent_modules
|
1702
|
+
[]
|
1703
|
+
end
|
1704
|
+
|
1669
1705
|
def inline_modules
|
1670
1706
|
sequence_primary.inline_modules
|
1671
1707
|
end
|
@@ -1722,6 +1758,10 @@ module Treetop
|
|
1722
1758
|
sequence_primary.compile(lexical_address, builder)
|
1723
1759
|
end
|
1724
1760
|
|
1761
|
+
def parent_modules
|
1762
|
+
[]
|
1763
|
+
end
|
1764
|
+
|
1725
1765
|
def inline_modules
|
1726
1766
|
sequence_primary.inline_modules
|
1727
1767
|
end
|
@@ -1925,6 +1965,10 @@ module Treetop
|
|
1925
1965
|
elements[1]
|
1926
1966
|
end
|
1927
1967
|
|
1968
|
+
def parent_modules
|
1969
|
+
[]
|
1970
|
+
end
|
1971
|
+
|
1928
1972
|
def inline_modules
|
1929
1973
|
atomic.inline_modules
|
1930
1974
|
end
|
@@ -1939,7 +1983,7 @@ module Treetop
|
|
1939
1983
|
elements[0]
|
1940
1984
|
end
|
1941
1985
|
|
1942
|
-
def
|
1986
|
+
def atomic
|
1943
1987
|
elements[2]
|
1944
1988
|
end
|
1945
1989
|
end
|
@@ -1949,8 +1993,11 @@ module Treetop
|
|
1949
1993
|
prefix.compile(address, builder, self)
|
1950
1994
|
end
|
1951
1995
|
def prefixed_expression
|
1952
|
-
|
1996
|
+
atomic
|
1953
1997
|
end
|
1998
|
+
def parent_modules
|
1999
|
+
[]
|
2000
|
+
end
|
1954
2001
|
def inline_modules
|
1955
2002
|
[]
|
1956
2003
|
end
|
@@ -1975,6 +2022,10 @@ module Treetop
|
|
1975
2022
|
nil
|
1976
2023
|
end
|
1977
2024
|
|
2025
|
+
def parent_modules
|
2026
|
+
[]
|
2027
|
+
end
|
2028
|
+
|
1978
2029
|
def inline_modules
|
1979
2030
|
atomic.inline_modules
|
1980
2031
|
end
|
@@ -2150,6 +2201,7 @@ module Treetop
|
|
2150
2201
|
node_class_expression.node_class_name
|
2151
2202
|
end
|
2152
2203
|
|
2204
|
+
# !!!! cjh !!!!!
|
2153
2205
|
def inline_modules
|
2154
2206
|
trailing_inline_module.inline_modules
|
2155
2207
|
end
|
@@ -2281,6 +2333,7 @@ module Treetop
|
|
2281
2333
|
r4 = true
|
2282
2334
|
@index += 1
|
2283
2335
|
else
|
2336
|
+
terminal_parse_failure('[0-9]')
|
2284
2337
|
r4 = nil
|
2285
2338
|
end
|
2286
2339
|
if r4
|
@@ -2307,6 +2360,7 @@ module Treetop
|
|
2307
2360
|
r7 = true
|
2308
2361
|
@index += 1
|
2309
2362
|
else
|
2363
|
+
terminal_parse_failure('[0-9]')
|
2310
2364
|
r7 = nil
|
2311
2365
|
end
|
2312
2366
|
if r7
|
@@ -2435,6 +2489,9 @@ module Treetop
|
|
2435
2489
|
end
|
2436
2490
|
|
2437
2491
|
module ParenthesizedExpression1
|
2492
|
+
def parent_modules
|
2493
|
+
[]
|
2494
|
+
end
|
2438
2495
|
def inline_modules
|
2439
2496
|
parsing_expression.inline_modules
|
2440
2497
|
end
|
@@ -2665,6 +2722,7 @@ module Treetop
|
|
2665
2722
|
r5 = true
|
2666
2723
|
@index += 1
|
2667
2724
|
else
|
2725
|
+
terminal_parse_failure('[ir]')
|
2668
2726
|
r5 = nil
|
2669
2727
|
end
|
2670
2728
|
if r5
|
@@ -3536,6 +3594,9 @@ module Treetop
|
|
3536
3594
|
end
|
3537
3595
|
|
3538
3596
|
module TrailingInlineModule1
|
3597
|
+
def parent_modules
|
3598
|
+
[]
|
3599
|
+
end
|
3539
3600
|
def inline_modules
|
3540
3601
|
[inline_module]
|
3541
3602
|
end
|
@@ -3546,6 +3607,9 @@ module Treetop
|
|
3546
3607
|
end
|
3547
3608
|
|
3548
3609
|
module TrailingInlineModule2
|
3610
|
+
def parent_modules
|
3611
|
+
[]
|
3612
|
+
end
|
3549
3613
|
def inline_modules
|
3550
3614
|
[]
|
3551
3615
|
end
|
@@ -3696,6 +3760,7 @@ module Treetop
|
|
3696
3760
|
r7 = true
|
3697
3761
|
@index += 1
|
3698
3762
|
else
|
3763
|
+
terminal_parse_failure('[{}]')
|
3699
3764
|
r7 = nil
|
3700
3765
|
end
|
3701
3766
|
if r7
|
@@ -3891,6 +3956,7 @@ module Treetop
|
|
3891
3956
|
r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
3892
3957
|
@index += 1
|
3893
3958
|
else
|
3959
|
+
terminal_parse_failure('[A-Za-z_]')
|
3894
3960
|
r0 = nil
|
3895
3961
|
end
|
3896
3962
|
|
@@ -3920,6 +3986,7 @@ module Treetop
|
|
3920
3986
|
r2 = true
|
3921
3987
|
@index += 1
|
3922
3988
|
else
|
3989
|
+
terminal_parse_failure('[0-9]')
|
3923
3990
|
r2 = nil
|
3924
3991
|
end
|
3925
3992
|
if r2
|
@@ -4081,6 +4148,7 @@ module Treetop
|
|
4081
4148
|
r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
|
4082
4149
|
@index += 1
|
4083
4150
|
else
|
4151
|
+
terminal_parse_failure('[ \\t\\n\\r]')
|
4084
4152
|
r0 = nil
|
4085
4153
|
end
|
4086
4154
|
|
@@ -2,15 +2,15 @@ module Treetop
|
|
2
2
|
module Compiler
|
3
3
|
grammar Metagrammar
|
4
4
|
rule treetop_file
|
5
|
-
requires:(space? require_statement)*
|
5
|
+
requires:(space? require_statement)* spacing:space? module_or_grammar suffix:space? {
|
6
6
|
def compile
|
7
|
-
requires.text_value +
|
7
|
+
requires.text_value + spacing.text_value + module_or_grammar.compile + suffix.text_value
|
8
8
|
end
|
9
9
|
}
|
10
10
|
end
|
11
11
|
|
12
12
|
rule require_statement
|
13
|
-
|
13
|
+
spacing:space? "require" [ \t]+ [^\n\r]+ [\n\r]
|
14
14
|
end
|
15
15
|
|
16
16
|
rule module_or_grammar
|
@@ -18,13 +18,13 @@ module Treetop
|
|
18
18
|
end
|
19
19
|
|
20
20
|
rule module_declaration
|
21
|
-
|
21
|
+
module_prefix:('module' space name:([A-Z] alphanumeric_char* ('::' [A-Z] alphanumeric_char*)*) space) module_contents:(module_declaration / grammar) suffix:(space 'end') {
|
22
22
|
def compile
|
23
|
-
|
23
|
+
module_prefix.text_value + module_contents.compile + suffix.text_value
|
24
24
|
end
|
25
25
|
|
26
26
|
def parser_name
|
27
|
-
|
27
|
+
module_prefix.name.text_value+'::'+module_contents.parser_name
|
28
28
|
end
|
29
29
|
}
|
30
30
|
end
|
@@ -84,6 +84,10 @@ module Treetop
|
|
84
84
|
super.elements.map {|elt| elt.alternative}
|
85
85
|
end
|
86
86
|
|
87
|
+
def parent_modules
|
88
|
+
[]
|
89
|
+
end
|
90
|
+
|
87
91
|
def inline_modules
|
88
92
|
(alternatives.map {|alt| alt.inline_modules }).flatten
|
89
93
|
end
|
@@ -100,10 +104,14 @@ module Treetop
|
|
100
104
|
sequence_body.tail
|
101
105
|
end
|
102
106
|
|
107
|
+
def parent_modules
|
108
|
+
node_class_declarations.inline_modules
|
109
|
+
end
|
110
|
+
|
103
111
|
def inline_modules
|
104
112
|
(sequence_elements.map {|elt| elt.inline_modules}).flatten +
|
105
113
|
[sequence_element_accessor_module] +
|
106
|
-
|
114
|
+
parent_modules
|
107
115
|
end
|
108
116
|
|
109
117
|
def inline_module_name
|
@@ -150,6 +158,10 @@ module Treetop
|
|
150
158
|
atomic
|
151
159
|
end
|
152
160
|
|
161
|
+
def parent_modules
|
162
|
+
[]
|
163
|
+
end
|
164
|
+
|
153
165
|
def inline_modules
|
154
166
|
atomic.inline_modules
|
155
167
|
end
|
@@ -159,13 +171,16 @@ module Treetop
|
|
159
171
|
end
|
160
172
|
}
|
161
173
|
/
|
162
|
-
prefix space? predicate_block {
|
174
|
+
prefix space? atomic:predicate_block {
|
163
175
|
def compile(address, builder, parent_expression=nil)
|
164
176
|
prefix.compile(address, builder, self)
|
165
177
|
end
|
166
178
|
def prefixed_expression
|
167
|
-
|
179
|
+
atomic
|
168
180
|
end
|
181
|
+
def parent_modules
|
182
|
+
[]
|
183
|
+
end
|
169
184
|
def inline_modules
|
170
185
|
[]
|
171
186
|
end
|
@@ -173,6 +188,7 @@ module Treetop
|
|
173
188
|
/
|
174
189
|
atomic suffix node_class_declarations {
|
175
190
|
def compile(address, builder, parent_expression=nil)
|
191
|
+
raise "Extraneous module ignored after suffix: #{input[interval].inspect}" if node_class_declarations.inline_modules.size > 0 && atomic.inline_modules.size > 0
|
176
192
|
suffix.compile(address, builder, self)
|
177
193
|
end
|
178
194
|
|
@@ -184,8 +200,12 @@ module Treetop
|
|
184
200
|
node_class_declarations.node_class_name
|
185
201
|
end
|
186
202
|
|
203
|
+
def parent_modules
|
204
|
+
node_class_declarations.inline_modules
|
205
|
+
end
|
206
|
+
|
187
207
|
def inline_modules
|
188
|
-
atomic.inline_modules +
|
208
|
+
atomic.inline_modules + parent_modules
|
189
209
|
end
|
190
210
|
|
191
211
|
def inline_module_name
|
@@ -195,6 +215,7 @@ module Treetop
|
|
195
215
|
/
|
196
216
|
atomic node_class_declarations {
|
197
217
|
def compile(address, builder, parent_expression=nil)
|
218
|
+
raise "Extraneous module ignored with nested atomic: #{input[interval].inspect}" if node_class_declarations.inline_modules.size > 0 && atomic.inline_modules.size > 0
|
198
219
|
atomic.compile(address, builder, self)
|
199
220
|
end
|
200
221
|
|
@@ -202,8 +223,12 @@ module Treetop
|
|
202
223
|
node_class_declarations.node_class_name
|
203
224
|
end
|
204
225
|
|
226
|
+
def parent_modules
|
227
|
+
node_class_declarations.inline_modules
|
228
|
+
end
|
229
|
+
|
205
230
|
def inline_modules
|
206
|
-
atomic.inline_modules +
|
231
|
+
atomic.inline_modules + parent_modules
|
207
232
|
end
|
208
233
|
|
209
234
|
def inline_module_name
|
@@ -222,6 +247,10 @@ module Treetop
|
|
222
247
|
sequence_primary.compile(lexical_address, builder)
|
223
248
|
end
|
224
249
|
|
250
|
+
def parent_modules
|
251
|
+
[]
|
252
|
+
end
|
253
|
+
|
225
254
|
def inline_modules
|
226
255
|
sequence_primary.inline_modules
|
227
256
|
end
|
@@ -238,6 +267,10 @@ module Treetop
|
|
238
267
|
sequence_primary.compile(lexical_address, builder)
|
239
268
|
end
|
240
269
|
|
270
|
+
def parent_modules
|
271
|
+
[]
|
272
|
+
end
|
273
|
+
|
241
274
|
def inline_modules
|
242
275
|
sequence_primary.inline_modules
|
243
276
|
end
|
@@ -282,6 +315,10 @@ module Treetop
|
|
282
315
|
elements[1]
|
283
316
|
end
|
284
317
|
|
318
|
+
def parent_modules
|
319
|
+
[]
|
320
|
+
end
|
321
|
+
|
285
322
|
def inline_modules
|
286
323
|
atomic.inline_modules
|
287
324
|
end
|
@@ -291,13 +328,16 @@ module Treetop
|
|
291
328
|
end
|
292
329
|
}
|
293
330
|
/
|
294
|
-
prefix space? predicate_block {
|
331
|
+
prefix space? atomic:predicate_block {
|
295
332
|
def compile(address, builder, parent_expression=nil)
|
296
333
|
prefix.compile(address, builder, self)
|
297
334
|
end
|
298
335
|
def prefixed_expression
|
299
|
-
|
336
|
+
atomic
|
300
337
|
end
|
338
|
+
def parent_modules
|
339
|
+
[]
|
340
|
+
end
|
301
341
|
def inline_modules
|
302
342
|
[]
|
303
343
|
end
|
@@ -312,6 +352,10 @@ module Treetop
|
|
312
352
|
nil
|
313
353
|
end
|
314
354
|
|
355
|
+
def parent_modules
|
356
|
+
[]
|
357
|
+
end
|
358
|
+
|
315
359
|
def inline_modules
|
316
360
|
atomic.inline_modules
|
317
361
|
end
|
@@ -338,6 +382,7 @@ module Treetop
|
|
338
382
|
node_class_expression.node_class_name
|
339
383
|
end
|
340
384
|
|
385
|
+
# !!!! cjh !!!!!
|
341
386
|
def inline_modules
|
342
387
|
trailing_inline_module.inline_modules
|
343
388
|
end
|
@@ -374,6 +419,9 @@ module Treetop
|
|
374
419
|
|
375
420
|
rule parenthesized_expression
|
376
421
|
'(' space? parsing_expression space? ')' <ParenthesizedExpression> {
|
422
|
+
def parent_modules
|
423
|
+
[]
|
424
|
+
end
|
377
425
|
def inline_modules
|
378
426
|
parsing_expression.inline_modules
|
379
427
|
end
|
@@ -439,6 +487,9 @@ module Treetop
|
|
439
487
|
|
440
488
|
rule trailing_inline_module
|
441
489
|
space inline_module {
|
490
|
+
def parent_modules
|
491
|
+
[]
|
492
|
+
end
|
442
493
|
def inline_modules
|
443
494
|
[inline_module]
|
444
495
|
end
|
@@ -449,6 +500,9 @@ module Treetop
|
|
449
500
|
}
|
450
501
|
/
|
451
502
|
'' {
|
503
|
+
def parent_modules
|
504
|
+
[]
|
505
|
+
end
|
452
506
|
def inline_modules
|
453
507
|
[]
|
454
508
|
end
|