less 0.8.13 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/README.md +10 -1
  2. data/Rakefile +21 -3
  3. data/VERSION +1 -1
  4. data/bin/lessc +0 -8
  5. data/less.gemspec +138 -15
  6. data/lib/less.rb +67 -11
  7. data/lib/less/command.rb +24 -25
  8. data/lib/less/engine.rb +36 -140
  9. data/lib/less/engine/builder.rb +8 -0
  10. data/lib/less/engine/less.tt +374 -0
  11. data/lib/less/engine/nodes.rb +8 -0
  12. data/lib/less/engine/nodes/element.rb +150 -0
  13. data/lib/less/engine/nodes/entity.rb +73 -0
  14. data/lib/less/engine/nodes/function.rb +82 -0
  15. data/lib/less/engine/nodes/literal.rb +135 -0
  16. data/lib/less/engine/nodes/property.rb +112 -0
  17. data/lib/less/engine/nodes/selector.rb +39 -0
  18. data/lib/less/engine/parser.rb +3860 -0
  19. data/lib/vendor/treetop/.gitignore +7 -0
  20. data/lib/vendor/treetop/LICENSE +19 -0
  21. data/lib/vendor/treetop/README +164 -0
  22. data/lib/vendor/treetop/Rakefile +19 -0
  23. data/lib/vendor/treetop/benchmark/seqpar.gnuplot +15 -0
  24. data/lib/vendor/treetop/benchmark/seqpar.treetop +16 -0
  25. data/lib/vendor/treetop/benchmark/seqpar_benchmark.rb +107 -0
  26. data/lib/vendor/treetop/bin/tt +28 -0
  27. data/lib/vendor/treetop/lib/treetop.rb +8 -0
  28. data/lib/vendor/treetop/lib/treetop/bootstrap_gen_1_metagrammar.rb +45 -0
  29. data/lib/vendor/treetop/lib/treetop/compiler.rb +6 -0
  30. data/lib/vendor/treetop/lib/treetop/compiler/grammar_compiler.rb +42 -0
  31. data/lib/vendor/treetop/lib/treetop/compiler/lexical_address_space.rb +17 -0
  32. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.rb +3097 -0
  33. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.treetop +408 -0
  34. data/lib/vendor/treetop/lib/treetop/compiler/node_classes.rb +19 -0
  35. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/anything_symbol.rb +18 -0
  36. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/atomic_expression.rb +14 -0
  37. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/character_class.rb +23 -0
  38. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/choice.rb +31 -0
  39. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/declaration_sequence.rb +24 -0
  40. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/grammar.rb +28 -0
  41. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/inline_module.rb +27 -0
  42. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/nonterminal.rb +13 -0
  43. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/optional.rb +19 -0
  44. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parenthesized_expression.rb +9 -0
  45. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_expression.rb +146 -0
  46. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_rule.rb +55 -0
  47. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/predicate.rb +45 -0
  48. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/repetition.rb +55 -0
  49. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/sequence.rb +68 -0
  50. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/terminal.rb +20 -0
  51. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/transient_prefix.rb +9 -0
  52. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/treetop_file.rb +9 -0
  53. data/lib/vendor/treetop/lib/treetop/compiler/ruby_builder.rb +113 -0
  54. data/lib/vendor/treetop/lib/treetop/ruby_extensions.rb +2 -0
  55. data/lib/vendor/treetop/lib/treetop/ruby_extensions/string.rb +42 -0
  56. data/lib/vendor/treetop/lib/treetop/runtime.rb +5 -0
  57. data/lib/vendor/treetop/lib/treetop/runtime/compiled_parser.rb +109 -0
  58. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list.rb +4 -0
  59. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/head_node.rb +15 -0
  60. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/interval_skip_list.rb +200 -0
  61. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/node.rb +164 -0
  62. data/lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb +90 -0
  63. data/lib/vendor/treetop/lib/treetop/runtime/terminal_parse_failure.rb +16 -0
  64. data/lib/vendor/treetop/lib/treetop/runtime/terminal_syntax_node.rb +17 -0
  65. data/lib/vendor/treetop/lib/treetop/version.rb +9 -0
  66. data/lib/vendor/treetop/spec/compiler/and_predicate_spec.rb +36 -0
  67. data/lib/vendor/treetop/spec/compiler/anything_symbol_spec.rb +44 -0
  68. data/lib/vendor/treetop/spec/compiler/character_class_spec.rb +247 -0
  69. data/lib/vendor/treetop/spec/compiler/choice_spec.rb +80 -0
  70. data/lib/vendor/treetop/spec/compiler/circular_compilation_spec.rb +28 -0
  71. data/lib/vendor/treetop/spec/compiler/failure_propagation_functional_spec.rb +21 -0
  72. data/lib/vendor/treetop/spec/compiler/grammar_compiler_spec.rb +84 -0
  73. data/lib/vendor/treetop/spec/compiler/grammar_spec.rb +41 -0
  74. data/lib/vendor/treetop/spec/compiler/nonterminal_symbol_spec.rb +40 -0
  75. data/lib/vendor/treetop/spec/compiler/not_predicate_spec.rb +38 -0
  76. data/lib/vendor/treetop/spec/compiler/one_or_more_spec.rb +35 -0
  77. data/lib/vendor/treetop/spec/compiler/optional_spec.rb +37 -0
  78. data/lib/vendor/treetop/spec/compiler/parenthesized_expression_spec.rb +19 -0
  79. data/lib/vendor/treetop/spec/compiler/parsing_rule_spec.rb +32 -0
  80. data/lib/vendor/treetop/spec/compiler/sequence_spec.rb +115 -0
  81. data/lib/vendor/treetop/spec/compiler/terminal_spec.rb +81 -0
  82. data/lib/vendor/treetop/spec/compiler/terminal_symbol_spec.rb +37 -0
  83. data/lib/vendor/treetop/spec/compiler/test_grammar.treetop +7 -0
  84. data/lib/vendor/treetop/spec/compiler/test_grammar.tt +7 -0
  85. data/lib/vendor/treetop/spec/compiler/test_grammar_do.treetop +7 -0
  86. data/lib/vendor/treetop/spec/compiler/zero_or_more_spec.rb +56 -0
  87. data/lib/vendor/treetop/spec/composition/a.treetop +11 -0
  88. data/lib/vendor/treetop/spec/composition/b.treetop +11 -0
  89. data/lib/vendor/treetop/spec/composition/c.treetop +10 -0
  90. data/lib/vendor/treetop/spec/composition/d.treetop +10 -0
  91. data/lib/vendor/treetop/spec/composition/f.treetop +17 -0
  92. data/lib/vendor/treetop/spec/composition/grammar_composition_spec.rb +40 -0
  93. data/lib/vendor/treetop/spec/composition/subfolder/e_includes_c.treetop +15 -0
  94. data/lib/vendor/treetop/spec/ruby_extensions/string_spec.rb +32 -0
  95. data/lib/vendor/treetop/spec/runtime/compiled_parser_spec.rb +101 -0
  96. data/lib/vendor/treetop/spec/runtime/interval_skip_list/delete_spec.rb +147 -0
  97. data/lib/vendor/treetop/spec/runtime/interval_skip_list/expire_range_spec.rb +349 -0
  98. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_and_delete_node.rb +385 -0
  99. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_spec.rb +660 -0
  100. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.graffle +6175 -0
  101. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +58 -0
  102. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture.rb +23 -0
  103. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +164 -0
  104. data/lib/vendor/treetop/spec/runtime/interval_skip_list/spec_helper.rb +84 -0
  105. data/lib/vendor/treetop/spec/runtime/syntax_node_spec.rb +68 -0
  106. data/lib/vendor/treetop/spec/spec_helper.rb +106 -0
  107. data/lib/vendor/treetop/spec/spec_suite.rb +4 -0
  108. data/lib/vendor/treetop/treetop.gemspec +17 -0
  109. data/spec/command_spec.rb +2 -6
  110. data/spec/css/accessors-1.0.css +18 -0
  111. data/spec/css/big-1.0.css +3768 -0
  112. data/spec/css/comments-1.0.css +9 -0
  113. data/spec/css/css-1.0.css +40 -0
  114. data/spec/css/functions-1.0.css +6 -0
  115. data/spec/css/import-1.0.css +11 -0
  116. data/spec/css/mixins-1.0.css +28 -0
  117. data/spec/css/operations-1.0.css +28 -0
  118. data/spec/css/rulesets-1.0.css +17 -0
  119. data/spec/css/scope-1.0.css +14 -0
  120. data/spec/css/strings-1.0.css +12 -0
  121. data/spec/css/variables-1.0.css +6 -0
  122. data/spec/css/whitespace-1.0.css +9 -0
  123. data/spec/engine_spec.rb +66 -18
  124. data/spec/less/accessors-1.0.less +20 -0
  125. data/spec/less/big-1.0.less +4810 -0
  126. data/spec/less/colors-1.0.less +0 -0
  127. data/spec/less/comments-1.0.less +46 -0
  128. data/spec/less/css-1.0.less +84 -0
  129. data/spec/less/exceptions/mixed-units-error.less +3 -0
  130. data/spec/less/exceptions/name-error-1.0.less +3 -0
  131. data/spec/less/exceptions/syntax-error-1.0.less +3 -0
  132. data/spec/less/functions-1.0.less +6 -0
  133. data/spec/less/import-1.0.less +7 -0
  134. data/spec/less/import/import-test-a.less +2 -0
  135. data/spec/less/import/import-test-b.less +8 -0
  136. data/spec/less/import/import-test-c.less +5 -0
  137. data/spec/less/mixins-1.0.less +43 -0
  138. data/spec/less/operations-1.0.less +39 -0
  139. data/spec/less/rulesets-1.0.less +30 -0
  140. data/spec/less/scope-1.0.less +33 -0
  141. data/spec/less/strings-1.0.less +14 -0
  142. data/spec/less/variables-1.0.less +18 -0
  143. data/spec/less/whitespace-1.0.less +21 -0
  144. data/spec/spec.css +79 -24
  145. data/spec/spec.less +2 -3
  146. data/spec/spec_helper.rb +4 -1
  147. metadata +136 -13
  148. data/lib/less/tree.rb +0 -82
  149. data/spec/css/less-0.8.10.css +0 -30
  150. data/spec/css/less-0.8.11.css +0 -31
  151. data/spec/css/less-0.8.12.css +0 -28
  152. data/spec/css/less-0.8.5.css +0 -24
  153. data/spec/css/less-0.8.6.css +0 -24
  154. data/spec/css/less-0.8.7.css +0 -24
  155. data/spec/css/less-0.8.8.css +0 -25
  156. data/spec/tree_spec.rb +0 -5
@@ -0,0 +1,42 @@
1
+ module Treetop
2
+ module Compiler
3
+ class GrammarCompiler
4
+ def compile(source_path, target_path = source_path.gsub(/\.(treetop|tt)\Z/, '.rb'))
5
+ File.open(target_path, 'w') do |target_file|
6
+ target_file.write(ruby_source(source_path))
7
+ end
8
+ end
9
+
10
+ # compile a treetop file into ruby
11
+ def ruby_source(source_path)
12
+ ruby_source_from_string(File.read(source_path))
13
+ end
14
+
15
+ # compile a string containing treetop source into ruby
16
+ def ruby_source_from_string(s)
17
+ parser = MetagrammarParser.new
18
+ result = parser.parse(s)
19
+ unless result
20
+ raise RuntimeError.new(parser.failure_reason)
21
+ end
22
+ result.compile
23
+ end
24
+ end
25
+ end
26
+
27
+ # compile a treetop source file and load it
28
+ def self.load(path)
29
+ adjusted_path = path =~ /\.(treetop|tt)\Z/ ? path : path + '.treetop'
30
+ File.open(adjusted_path) do |source_file|
31
+ source = source_file.read
32
+ source.gsub!(/\b__FILE__\b/, %Q{"#{adjusted_path}"})
33
+ load_from_string(source)
34
+ end
35
+ end
36
+
37
+ # compile a treetop source string and load it
38
+ def self.load_from_string(s)
39
+ compiler = Treetop::Compiler::GrammarCompiler.new
40
+ Object.class_eval(compiler.ruby_source_from_string(s))
41
+ end
42
+ end
@@ -0,0 +1,17 @@
1
+ module Treetop
2
+ module Compiler
3
+ class LexicalAddressSpace
4
+ def initialize
5
+ reset_addresses
6
+ end
7
+
8
+ def next_address
9
+ @next_address += 1
10
+ end
11
+
12
+ def reset_addresses
13
+ @next_address = -1
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3097 @@
1
+ module Treetop
2
+ module Compiler
3
+ module Metagrammar
4
+ include Treetop::Runtime
5
+
6
+ def root
7
+ @root || :treetop_file
8
+ end
9
+
10
+ module TreetopFile0
11
+ def require_statement
12
+ elements[1]
13
+ end
14
+ end
15
+
16
+ module TreetopFile1
17
+ def requires
18
+ elements[0]
19
+ end
20
+
21
+ def prefix
22
+ elements[1]
23
+ end
24
+
25
+ def module_or_grammar
26
+ elements[2]
27
+ end
28
+
29
+ def suffix
30
+ elements[3]
31
+ end
32
+ end
33
+
34
+ module TreetopFile2
35
+ def compile
36
+ requires.text_value + prefix.text_value + module_or_grammar.compile + suffix.text_value
37
+ end
38
+ end
39
+
40
+ def _nt_treetop_file
41
+ start_index = index
42
+ if node_cache[:treetop_file].has_key?(index)
43
+ cached = node_cache[:treetop_file][index]
44
+ @index = cached.interval.end if cached
45
+ return cached
46
+ end
47
+
48
+ i0, s0 = index, []
49
+ s1, i1 = [], index
50
+ loop do
51
+ i2, s2 = index, []
52
+ r4 = _nt_space
53
+ if r4
54
+ r3 = r4
55
+ else
56
+ r3 = instantiate_node(SyntaxNode,input, index...index)
57
+ end
58
+ s2 << r3
59
+ if r3
60
+ r5 = _nt_require_statement
61
+ s2 << r5
62
+ end
63
+ if s2.last
64
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
65
+ r2.extend(TreetopFile0)
66
+ else
67
+ self.index = i2
68
+ r2 = nil
69
+ end
70
+ if r2
71
+ s1 << r2
72
+ else
73
+ break
74
+ end
75
+ end
76
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
77
+ s0 << r1
78
+ if r1
79
+ r7 = _nt_space
80
+ if r7
81
+ r6 = r7
82
+ else
83
+ r6 = instantiate_node(SyntaxNode,input, index...index)
84
+ end
85
+ s0 << r6
86
+ if r6
87
+ i8 = index
88
+ r9 = _nt_module_declaration
89
+ if r9
90
+ r8 = r9
91
+ else
92
+ r10 = _nt_grammar
93
+ if r10
94
+ r8 = r10
95
+ else
96
+ self.index = i8
97
+ r8 = nil
98
+ end
99
+ end
100
+ s0 << r8
101
+ if r8
102
+ r12 = _nt_space
103
+ if r12
104
+ r11 = r12
105
+ else
106
+ r11 = instantiate_node(SyntaxNode,input, index...index)
107
+ end
108
+ s0 << r11
109
+ end
110
+ end
111
+ end
112
+ if s0.last
113
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
114
+ r0.extend(TreetopFile1)
115
+ r0.extend(TreetopFile2)
116
+ else
117
+ self.index = i0
118
+ r0 = nil
119
+ end
120
+
121
+ node_cache[:treetop_file][start_index] = r0
122
+
123
+ return r0
124
+ end
125
+
126
+ module RequireStatement0
127
+ def prefix
128
+ elements[0]
129
+ end
130
+
131
+ end
132
+
133
+ def _nt_require_statement
134
+ start_index = index
135
+ if node_cache[:require_statement].has_key?(index)
136
+ cached = node_cache[:require_statement][index]
137
+ @index = cached.interval.end if cached
138
+ return cached
139
+ end
140
+
141
+ i0, s0 = index, []
142
+ r2 = _nt_space
143
+ if r2
144
+ r1 = r2
145
+ else
146
+ r1 = instantiate_node(SyntaxNode,input, index...index)
147
+ end
148
+ s0 << r1
149
+ if r1
150
+ if input.index("require", index) == index
151
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 7))
152
+ @index += 7
153
+ else
154
+ terminal_parse_failure("require")
155
+ r3 = nil
156
+ end
157
+ s0 << r3
158
+ if r3
159
+ s4, i4 = [], index
160
+ loop do
161
+ if input.index(Regexp.new('[ \\t]'), index) == index
162
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
163
+ @index += 1
164
+ else
165
+ r5 = nil
166
+ end
167
+ if r5
168
+ s4 << r5
169
+ else
170
+ break
171
+ end
172
+ end
173
+ if s4.empty?
174
+ self.index = i4
175
+ r4 = nil
176
+ else
177
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
178
+ end
179
+ s0 << r4
180
+ if r4
181
+ s6, i6 = [], index
182
+ loop do
183
+ if input.index(Regexp.new('[^\\n\\r]'), index) == index
184
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
185
+ @index += 1
186
+ else
187
+ r7 = nil
188
+ end
189
+ if r7
190
+ s6 << r7
191
+ else
192
+ break
193
+ end
194
+ end
195
+ if s6.empty?
196
+ self.index = i6
197
+ r6 = nil
198
+ else
199
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
200
+ end
201
+ s0 << r6
202
+ if r6
203
+ if input.index(Regexp.new('[\\n\\r]'), index) == index
204
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
205
+ @index += 1
206
+ else
207
+ r8 = nil
208
+ end
209
+ s0 << r8
210
+ end
211
+ end
212
+ end
213
+ end
214
+ if s0.last
215
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
216
+ r0.extend(RequireStatement0)
217
+ else
218
+ self.index = i0
219
+ r0 = nil
220
+ end
221
+
222
+ node_cache[:require_statement][start_index] = r0
223
+
224
+ return r0
225
+ end
226
+
227
+ module ModuleDeclaration0
228
+ def space
229
+ elements[1]
230
+ end
231
+
232
+ def space
233
+ elements[4]
234
+ end
235
+ end
236
+
237
+ module ModuleDeclaration1
238
+ def space
239
+ elements[0]
240
+ end
241
+
242
+ end
243
+
244
+ module ModuleDeclaration2
245
+ def prefix
246
+ elements[0]
247
+ end
248
+
249
+ def module_contents
250
+ elements[1]
251
+ end
252
+
253
+ def suffix
254
+ elements[2]
255
+ end
256
+ end
257
+
258
+ module ModuleDeclaration3
259
+ def compile
260
+ prefix.text_value + module_contents.compile + suffix.text_value
261
+ end
262
+ end
263
+
264
+ def _nt_module_declaration
265
+ start_index = index
266
+ if node_cache[:module_declaration].has_key?(index)
267
+ cached = node_cache[:module_declaration][index]
268
+ @index = cached.interval.end if cached
269
+ return cached
270
+ end
271
+
272
+ i0, s0 = index, []
273
+ i1, s1 = index, []
274
+ if input.index('module', index) == index
275
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 6))
276
+ @index += 6
277
+ else
278
+ terminal_parse_failure('module')
279
+ r2 = nil
280
+ end
281
+ s1 << r2
282
+ if r2
283
+ r3 = _nt_space
284
+ s1 << r3
285
+ if r3
286
+ if input.index(Regexp.new('[A-Z]'), index) == index
287
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
288
+ @index += 1
289
+ else
290
+ r4 = nil
291
+ end
292
+ s1 << r4
293
+ if r4
294
+ s5, i5 = [], index
295
+ loop do
296
+ r6 = _nt_alphanumeric_char
297
+ if r6
298
+ s5 << r6
299
+ else
300
+ break
301
+ end
302
+ end
303
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
304
+ s1 << r5
305
+ if r5
306
+ r7 = _nt_space
307
+ s1 << r7
308
+ end
309
+ end
310
+ end
311
+ end
312
+ if s1.last
313
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
314
+ r1.extend(ModuleDeclaration0)
315
+ else
316
+ self.index = i1
317
+ r1 = nil
318
+ end
319
+ s0 << r1
320
+ if r1
321
+ i8 = index
322
+ r9 = _nt_module_declaration
323
+ if r9
324
+ r8 = r9
325
+ else
326
+ r10 = _nt_grammar
327
+ if r10
328
+ r8 = r10
329
+ else
330
+ self.index = i8
331
+ r8 = nil
332
+ end
333
+ end
334
+ s0 << r8
335
+ if r8
336
+ i11, s11 = index, []
337
+ r12 = _nt_space
338
+ s11 << r12
339
+ if r12
340
+ if input.index('end', index) == index
341
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 3))
342
+ @index += 3
343
+ else
344
+ terminal_parse_failure('end')
345
+ r13 = nil
346
+ end
347
+ s11 << r13
348
+ end
349
+ if s11.last
350
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
351
+ r11.extend(ModuleDeclaration1)
352
+ else
353
+ self.index = i11
354
+ r11 = nil
355
+ end
356
+ s0 << r11
357
+ end
358
+ end
359
+ if s0.last
360
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
361
+ r0.extend(ModuleDeclaration2)
362
+ r0.extend(ModuleDeclaration3)
363
+ else
364
+ self.index = i0
365
+ r0 = nil
366
+ end
367
+
368
+ node_cache[:module_declaration][start_index] = r0
369
+
370
+ return r0
371
+ end
372
+
373
+ module Grammar0
374
+ def space
375
+ elements[1]
376
+ end
377
+ end
378
+
379
+ module Grammar1
380
+ def space
381
+ elements[1]
382
+ end
383
+
384
+ def grammar_name
385
+ elements[2]
386
+ end
387
+
388
+ def space
389
+ elements[3]
390
+ end
391
+
392
+ def declaration_sequence
393
+ elements[5]
394
+ end
395
+
396
+ end
397
+
398
+ def _nt_grammar
399
+ start_index = index
400
+ if node_cache[:grammar].has_key?(index)
401
+ cached = node_cache[:grammar][index]
402
+ @index = cached.interval.end if cached
403
+ return cached
404
+ end
405
+
406
+ i0, s0 = index, []
407
+ if input.index('grammar', index) == index
408
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
409
+ @index += 7
410
+ else
411
+ terminal_parse_failure('grammar')
412
+ r1 = nil
413
+ end
414
+ s0 << r1
415
+ if r1
416
+ r2 = _nt_space
417
+ s0 << r2
418
+ if r2
419
+ r3 = _nt_grammar_name
420
+ s0 << r3
421
+ if r3
422
+ r4 = _nt_space
423
+ s0 << r4
424
+ if r4
425
+ i6, s6 = index, []
426
+ if input.index('do', index) == index
427
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
428
+ @index += 2
429
+ else
430
+ terminal_parse_failure('do')
431
+ r7 = nil
432
+ end
433
+ s6 << r7
434
+ if r7
435
+ r8 = _nt_space
436
+ s6 << r8
437
+ end
438
+ if s6.last
439
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
440
+ r6.extend(Grammar0)
441
+ else
442
+ self.index = i6
443
+ r6 = nil
444
+ end
445
+ if r6
446
+ r5 = r6
447
+ else
448
+ r5 = instantiate_node(SyntaxNode,input, index...index)
449
+ end
450
+ s0 << r5
451
+ if r5
452
+ r9 = _nt_declaration_sequence
453
+ s0 << r9
454
+ if r9
455
+ r11 = _nt_space
456
+ if r11
457
+ r10 = r11
458
+ else
459
+ r10 = instantiate_node(SyntaxNode,input, index...index)
460
+ end
461
+ s0 << r10
462
+ if r10
463
+ if input.index('end', index) == index
464
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 3))
465
+ @index += 3
466
+ else
467
+ terminal_parse_failure('end')
468
+ r12 = nil
469
+ end
470
+ s0 << r12
471
+ end
472
+ end
473
+ end
474
+ end
475
+ end
476
+ end
477
+ end
478
+ if s0.last
479
+ r0 = instantiate_node(Grammar,input, i0...index, s0)
480
+ r0.extend(Grammar1)
481
+ else
482
+ self.index = i0
483
+ r0 = nil
484
+ end
485
+
486
+ node_cache[:grammar][start_index] = r0
487
+
488
+ return r0
489
+ end
490
+
491
+ module GrammarName0
492
+ end
493
+
494
+ def _nt_grammar_name
495
+ start_index = index
496
+ if node_cache[:grammar_name].has_key?(index)
497
+ cached = node_cache[:grammar_name][index]
498
+ @index = cached.interval.end if cached
499
+ return cached
500
+ end
501
+
502
+ i0, s0 = index, []
503
+ if input.index(Regexp.new('[A-Z]'), index) == index
504
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
505
+ @index += 1
506
+ else
507
+ r1 = nil
508
+ end
509
+ s0 << r1
510
+ if r1
511
+ s2, i2 = [], index
512
+ loop do
513
+ r3 = _nt_alphanumeric_char
514
+ if r3
515
+ s2 << r3
516
+ else
517
+ break
518
+ end
519
+ end
520
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
521
+ s0 << r2
522
+ end
523
+ if s0.last
524
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
525
+ r0.extend(GrammarName0)
526
+ else
527
+ self.index = i0
528
+ r0 = nil
529
+ end
530
+
531
+ node_cache[:grammar_name][start_index] = r0
532
+
533
+ return r0
534
+ end
535
+
536
+ module DeclarationSequence0
537
+ def space
538
+ elements[0]
539
+ end
540
+
541
+ def declaration
542
+ elements[1]
543
+ end
544
+ end
545
+
546
+ module DeclarationSequence1
547
+ def head
548
+ elements[0]
549
+ end
550
+
551
+ def tail
552
+ elements[1]
553
+ end
554
+ end
555
+
556
+ module DeclarationSequence2
557
+ def declarations
558
+ [head] + tail
559
+ end
560
+
561
+ def tail
562
+ super.elements.map { |elt| elt.declaration }
563
+ end
564
+ end
565
+
566
+ module DeclarationSequence3
567
+ def compile(builder)
568
+ end
569
+ end
570
+
571
+ def _nt_declaration_sequence
572
+ start_index = index
573
+ if node_cache[:declaration_sequence].has_key?(index)
574
+ cached = node_cache[:declaration_sequence][index]
575
+ @index = cached.interval.end if cached
576
+ return cached
577
+ end
578
+
579
+ i0 = index
580
+ i1, s1 = index, []
581
+ r2 = _nt_declaration
582
+ s1 << r2
583
+ if r2
584
+ s3, i3 = [], index
585
+ loop do
586
+ i4, s4 = index, []
587
+ r5 = _nt_space
588
+ s4 << r5
589
+ if r5
590
+ r6 = _nt_declaration
591
+ s4 << r6
592
+ end
593
+ if s4.last
594
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
595
+ r4.extend(DeclarationSequence0)
596
+ else
597
+ self.index = i4
598
+ r4 = nil
599
+ end
600
+ if r4
601
+ s3 << r4
602
+ else
603
+ break
604
+ end
605
+ end
606
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
607
+ s1 << r3
608
+ end
609
+ if s1.last
610
+ r1 = instantiate_node(DeclarationSequence,input, i1...index, s1)
611
+ r1.extend(DeclarationSequence1)
612
+ r1.extend(DeclarationSequence2)
613
+ else
614
+ self.index = i1
615
+ r1 = nil
616
+ end
617
+ if r1
618
+ r0 = r1
619
+ else
620
+ if input.index('', index) == index
621
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 0))
622
+ r7.extend(DeclarationSequence3)
623
+ @index += 0
624
+ else
625
+ terminal_parse_failure('')
626
+ r7 = nil
627
+ end
628
+ if r7
629
+ r0 = r7
630
+ else
631
+ self.index = i0
632
+ r0 = nil
633
+ end
634
+ end
635
+
636
+ node_cache[:declaration_sequence][start_index] = r0
637
+
638
+ return r0
639
+ end
640
+
641
+ def _nt_declaration
642
+ start_index = index
643
+ if node_cache[:declaration].has_key?(index)
644
+ cached = node_cache[:declaration][index]
645
+ @index = cached.interval.end if cached
646
+ return cached
647
+ end
648
+
649
+ i0 = index
650
+ r1 = _nt_parsing_rule
651
+ if r1
652
+ r0 = r1
653
+ else
654
+ r2 = _nt_include_declaration
655
+ if r2
656
+ r0 = r2
657
+ else
658
+ self.index = i0
659
+ r0 = nil
660
+ end
661
+ end
662
+
663
+ node_cache[:declaration][start_index] = r0
664
+
665
+ return r0
666
+ end
667
+
668
+ module IncludeDeclaration0
669
+ def space
670
+ elements[1]
671
+ end
672
+
673
+ end
674
+
675
+ module IncludeDeclaration1
676
+ def compile(builder)
677
+ builder << text_value
678
+ end
679
+ end
680
+
681
+ def _nt_include_declaration
682
+ start_index = index
683
+ if node_cache[:include_declaration].has_key?(index)
684
+ cached = node_cache[:include_declaration][index]
685
+ @index = cached.interval.end if cached
686
+ return cached
687
+ end
688
+
689
+ i0, s0 = index, []
690
+ if input.index('include', index) == index
691
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
692
+ @index += 7
693
+ else
694
+ terminal_parse_failure('include')
695
+ r1 = nil
696
+ end
697
+ s0 << r1
698
+ if r1
699
+ r2 = _nt_space
700
+ s0 << r2
701
+ if r2
702
+ if input.index(Regexp.new('[A-Z]'), index) == index
703
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
704
+ @index += 1
705
+ else
706
+ r3 = nil
707
+ end
708
+ s0 << r3
709
+ if r3
710
+ s4, i4 = [], index
711
+ loop do
712
+ i5 = index
713
+ r6 = _nt_alphanumeric_char
714
+ if r6
715
+ r5 = r6
716
+ else
717
+ if input.index('::', index) == index
718
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
719
+ @index += 2
720
+ else
721
+ terminal_parse_failure('::')
722
+ r7 = nil
723
+ end
724
+ if r7
725
+ r5 = r7
726
+ else
727
+ self.index = i5
728
+ r5 = nil
729
+ end
730
+ end
731
+ if r5
732
+ s4 << r5
733
+ else
734
+ break
735
+ end
736
+ end
737
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
738
+ s0 << r4
739
+ end
740
+ end
741
+ end
742
+ if s0.last
743
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
744
+ r0.extend(IncludeDeclaration0)
745
+ r0.extend(IncludeDeclaration1)
746
+ else
747
+ self.index = i0
748
+ r0 = nil
749
+ end
750
+
751
+ node_cache[:include_declaration][start_index] = r0
752
+
753
+ return r0
754
+ end
755
+
756
+ module ParsingRule0
757
+ def space
758
+ elements[1]
759
+ end
760
+ end
761
+
762
+ module ParsingRule1
763
+ def space
764
+ elements[1]
765
+ end
766
+
767
+ def nonterminal
768
+ elements[2]
769
+ end
770
+
771
+ def space
772
+ elements[3]
773
+ end
774
+
775
+ def parsing_expression
776
+ elements[5]
777
+ end
778
+
779
+ def space
780
+ elements[6]
781
+ end
782
+
783
+ end
784
+
785
+ def _nt_parsing_rule
786
+ start_index = index
787
+ if node_cache[:parsing_rule].has_key?(index)
788
+ cached = node_cache[:parsing_rule][index]
789
+ @index = cached.interval.end if cached
790
+ return cached
791
+ end
792
+
793
+ i0, s0 = index, []
794
+ if input.index('rule', index) == index
795
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
796
+ @index += 4
797
+ else
798
+ terminal_parse_failure('rule')
799
+ r1 = nil
800
+ end
801
+ s0 << r1
802
+ if r1
803
+ r2 = _nt_space
804
+ s0 << r2
805
+ if r2
806
+ r3 = _nt_nonterminal
807
+ s0 << r3
808
+ if r3
809
+ r4 = _nt_space
810
+ s0 << r4
811
+ if r4
812
+ i6, s6 = index, []
813
+ if input.index('do', index) == index
814
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
815
+ @index += 2
816
+ else
817
+ terminal_parse_failure('do')
818
+ r7 = nil
819
+ end
820
+ s6 << r7
821
+ if r7
822
+ r8 = _nt_space
823
+ s6 << r8
824
+ end
825
+ if s6.last
826
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
827
+ r6.extend(ParsingRule0)
828
+ else
829
+ self.index = i6
830
+ r6 = nil
831
+ end
832
+ if r6
833
+ r5 = r6
834
+ else
835
+ r5 = instantiate_node(SyntaxNode,input, index...index)
836
+ end
837
+ s0 << r5
838
+ if r5
839
+ r9 = _nt_parsing_expression
840
+ s0 << r9
841
+ if r9
842
+ r10 = _nt_space
843
+ s0 << r10
844
+ if r10
845
+ if input.index('end', index) == index
846
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 3))
847
+ @index += 3
848
+ else
849
+ terminal_parse_failure('end')
850
+ r11 = nil
851
+ end
852
+ s0 << r11
853
+ end
854
+ end
855
+ end
856
+ end
857
+ end
858
+ end
859
+ end
860
+ if s0.last
861
+ r0 = instantiate_node(ParsingRule,input, i0...index, s0)
862
+ r0.extend(ParsingRule1)
863
+ else
864
+ self.index = i0
865
+ r0 = nil
866
+ end
867
+
868
+ node_cache[:parsing_rule][start_index] = r0
869
+
870
+ return r0
871
+ end
872
+
873
+ def _nt_parsing_expression
874
+ start_index = index
875
+ if node_cache[:parsing_expression].has_key?(index)
876
+ cached = node_cache[:parsing_expression][index]
877
+ @index = cached.interval.end if cached
878
+ return cached
879
+ end
880
+
881
+ i0 = index
882
+ r1 = _nt_choice
883
+ if r1
884
+ r0 = r1
885
+ else
886
+ r2 = _nt_sequence
887
+ if r2
888
+ r0 = r2
889
+ else
890
+ r3 = _nt_primary
891
+ if r3
892
+ r0 = r3
893
+ else
894
+ self.index = i0
895
+ r0 = nil
896
+ end
897
+ end
898
+ end
899
+
900
+ node_cache[:parsing_expression][start_index] = r0
901
+
902
+ return r0
903
+ end
904
+
905
+ module Choice0
906
+ def alternative
907
+ elements[3]
908
+ end
909
+ end
910
+
911
+ module Choice1
912
+ def head
913
+ elements[0]
914
+ end
915
+
916
+ def tail
917
+ elements[1]
918
+ end
919
+ end
920
+
921
+ module Choice2
922
+ def alternatives
923
+ [head] + tail
924
+ end
925
+
926
+ def tail
927
+ super.elements.map {|elt| elt.alternative}
928
+ end
929
+
930
+ def inline_modules
931
+ (alternatives.map {|alt| alt.inline_modules }).flatten
932
+ end
933
+ end
934
+
935
+ def _nt_choice
936
+ start_index = index
937
+ if node_cache[:choice].has_key?(index)
938
+ cached = node_cache[:choice][index]
939
+ @index = cached.interval.end if cached
940
+ return cached
941
+ end
942
+
943
+ i0, s0 = index, []
944
+ r1 = _nt_alternative
945
+ s0 << r1
946
+ if r1
947
+ s2, i2 = [], index
948
+ loop do
949
+ i3, s3 = index, []
950
+ r5 = _nt_space
951
+ if r5
952
+ r4 = r5
953
+ else
954
+ r4 = instantiate_node(SyntaxNode,input, index...index)
955
+ end
956
+ s3 << r4
957
+ if r4
958
+ if input.index('/', index) == index
959
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
960
+ @index += 1
961
+ else
962
+ terminal_parse_failure('/')
963
+ r6 = nil
964
+ end
965
+ s3 << r6
966
+ if r6
967
+ r8 = _nt_space
968
+ if r8
969
+ r7 = r8
970
+ else
971
+ r7 = instantiate_node(SyntaxNode,input, index...index)
972
+ end
973
+ s3 << r7
974
+ if r7
975
+ r9 = _nt_alternative
976
+ s3 << r9
977
+ end
978
+ end
979
+ end
980
+ if s3.last
981
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
982
+ r3.extend(Choice0)
983
+ else
984
+ self.index = i3
985
+ r3 = nil
986
+ end
987
+ if r3
988
+ s2 << r3
989
+ else
990
+ break
991
+ end
992
+ end
993
+ if s2.empty?
994
+ self.index = i2
995
+ r2 = nil
996
+ else
997
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
998
+ end
999
+ s0 << r2
1000
+ end
1001
+ if s0.last
1002
+ r0 = instantiate_node(Choice,input, i0...index, s0)
1003
+ r0.extend(Choice1)
1004
+ r0.extend(Choice2)
1005
+ else
1006
+ self.index = i0
1007
+ r0 = nil
1008
+ end
1009
+
1010
+ node_cache[:choice][start_index] = r0
1011
+
1012
+ return r0
1013
+ end
1014
+
1015
+ module Sequence0
1016
+ def space
1017
+ elements[0]
1018
+ end
1019
+
1020
+ def labeled_sequence_primary
1021
+ elements[1]
1022
+ end
1023
+ end
1024
+
1025
+ module Sequence1
1026
+ def head
1027
+ elements[0]
1028
+ end
1029
+
1030
+ def tail
1031
+ elements[1]
1032
+ end
1033
+
1034
+ def node_class_declarations
1035
+ elements[2]
1036
+ end
1037
+ end
1038
+
1039
+ module Sequence2
1040
+ def sequence_elements
1041
+ [head] + tail
1042
+ end
1043
+
1044
+ def tail
1045
+ super.elements.map {|elt| elt.labeled_sequence_primary }
1046
+ end
1047
+
1048
+ def inline_modules
1049
+ (sequence_elements.map {|elt| elt.inline_modules}).flatten +
1050
+ [sequence_element_accessor_module] +
1051
+ node_class_declarations.inline_modules
1052
+ end
1053
+
1054
+ def inline_module_name
1055
+ node_class_declarations.inline_module_name
1056
+ end
1057
+ end
1058
+
1059
+ def _nt_sequence
1060
+ start_index = index
1061
+ if node_cache[:sequence].has_key?(index)
1062
+ cached = node_cache[:sequence][index]
1063
+ @index = cached.interval.end if cached
1064
+ return cached
1065
+ end
1066
+
1067
+ i0, s0 = index, []
1068
+ r1 = _nt_labeled_sequence_primary
1069
+ s0 << r1
1070
+ if r1
1071
+ s2, i2 = [], index
1072
+ loop do
1073
+ i3, s3 = index, []
1074
+ r4 = _nt_space
1075
+ s3 << r4
1076
+ if r4
1077
+ r5 = _nt_labeled_sequence_primary
1078
+ s3 << r5
1079
+ end
1080
+ if s3.last
1081
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1082
+ r3.extend(Sequence0)
1083
+ else
1084
+ self.index = i3
1085
+ r3 = nil
1086
+ end
1087
+ if r3
1088
+ s2 << r3
1089
+ else
1090
+ break
1091
+ end
1092
+ end
1093
+ if s2.empty?
1094
+ self.index = i2
1095
+ r2 = nil
1096
+ else
1097
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1098
+ end
1099
+ s0 << r2
1100
+ if r2
1101
+ r6 = _nt_node_class_declarations
1102
+ s0 << r6
1103
+ end
1104
+ end
1105
+ if s0.last
1106
+ r0 = instantiate_node(Sequence,input, i0...index, s0)
1107
+ r0.extend(Sequence1)
1108
+ r0.extend(Sequence2)
1109
+ else
1110
+ self.index = i0
1111
+ r0 = nil
1112
+ end
1113
+
1114
+ node_cache[:sequence][start_index] = r0
1115
+
1116
+ return r0
1117
+ end
1118
+
1119
+ def _nt_alternative
1120
+ start_index = index
1121
+ if node_cache[:alternative].has_key?(index)
1122
+ cached = node_cache[:alternative][index]
1123
+ @index = cached.interval.end if cached
1124
+ return cached
1125
+ end
1126
+
1127
+ i0 = index
1128
+ r1 = _nt_sequence
1129
+ if r1
1130
+ r0 = r1
1131
+ else
1132
+ r2 = _nt_primary
1133
+ if r2
1134
+ r0 = r2
1135
+ else
1136
+ self.index = i0
1137
+ r0 = nil
1138
+ end
1139
+ end
1140
+
1141
+ node_cache[:alternative][start_index] = r0
1142
+
1143
+ return r0
1144
+ end
1145
+
1146
+ module Primary0
1147
+ def prefix
1148
+ elements[0]
1149
+ end
1150
+
1151
+ def atomic
1152
+ elements[1]
1153
+ end
1154
+ end
1155
+
1156
+ module Primary1
1157
+ def compile(address, builder, parent_expression=nil)
1158
+ prefix.compile(address, builder, self)
1159
+ end
1160
+
1161
+ def prefixed_expression
1162
+ atomic
1163
+ end
1164
+
1165
+ def inline_modules
1166
+ atomic.inline_modules
1167
+ end
1168
+
1169
+ def inline_module_name
1170
+ nil
1171
+ end
1172
+ end
1173
+
1174
+ module Primary2
1175
+ def atomic
1176
+ elements[0]
1177
+ end
1178
+
1179
+ def suffix
1180
+ elements[1]
1181
+ end
1182
+
1183
+ def node_class_declarations
1184
+ elements[2]
1185
+ end
1186
+ end
1187
+
1188
+ module Primary3
1189
+ def compile(address, builder, parent_expression=nil)
1190
+ suffix.compile(address, builder, self)
1191
+ end
1192
+
1193
+ def optional_expression
1194
+ atomic
1195
+ end
1196
+
1197
+ def node_class_name
1198
+ node_class_declarations.node_class_name
1199
+ end
1200
+
1201
+ def inline_modules
1202
+ atomic.inline_modules + node_class_declarations.inline_modules
1203
+ end
1204
+
1205
+ def inline_module_name
1206
+ node_class_declarations.inline_module_name
1207
+ end
1208
+ end
1209
+
1210
+ module Primary4
1211
+ def atomic
1212
+ elements[0]
1213
+ end
1214
+
1215
+ def node_class_declarations
1216
+ elements[1]
1217
+ end
1218
+ end
1219
+
1220
+ module Primary5
1221
+ def compile(address, builder, parent_expression=nil)
1222
+ atomic.compile(address, builder, self)
1223
+ end
1224
+
1225
+ def node_class_name
1226
+ node_class_declarations.node_class_name
1227
+ end
1228
+
1229
+ def inline_modules
1230
+ atomic.inline_modules + node_class_declarations.inline_modules
1231
+ end
1232
+
1233
+ def inline_module_name
1234
+ node_class_declarations.inline_module_name
1235
+ end
1236
+ end
1237
+
1238
+ def _nt_primary
1239
+ start_index = index
1240
+ if node_cache[:primary].has_key?(index)
1241
+ cached = node_cache[:primary][index]
1242
+ @index = cached.interval.end if cached
1243
+ return cached
1244
+ end
1245
+
1246
+ i0 = index
1247
+ i1, s1 = index, []
1248
+ r2 = _nt_prefix
1249
+ s1 << r2
1250
+ if r2
1251
+ r3 = _nt_atomic
1252
+ s1 << r3
1253
+ end
1254
+ if s1.last
1255
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1256
+ r1.extend(Primary0)
1257
+ r1.extend(Primary1)
1258
+ else
1259
+ self.index = i1
1260
+ r1 = nil
1261
+ end
1262
+ if r1
1263
+ r0 = r1
1264
+ else
1265
+ i4, s4 = index, []
1266
+ r5 = _nt_atomic
1267
+ s4 << r5
1268
+ if r5
1269
+ r6 = _nt_suffix
1270
+ s4 << r6
1271
+ if r6
1272
+ r7 = _nt_node_class_declarations
1273
+ s4 << r7
1274
+ end
1275
+ end
1276
+ if s4.last
1277
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1278
+ r4.extend(Primary2)
1279
+ r4.extend(Primary3)
1280
+ else
1281
+ self.index = i4
1282
+ r4 = nil
1283
+ end
1284
+ if r4
1285
+ r0 = r4
1286
+ else
1287
+ i8, s8 = index, []
1288
+ r9 = _nt_atomic
1289
+ s8 << r9
1290
+ if r9
1291
+ r10 = _nt_node_class_declarations
1292
+ s8 << r10
1293
+ end
1294
+ if s8.last
1295
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1296
+ r8.extend(Primary4)
1297
+ r8.extend(Primary5)
1298
+ else
1299
+ self.index = i8
1300
+ r8 = nil
1301
+ end
1302
+ if r8
1303
+ r0 = r8
1304
+ else
1305
+ self.index = i0
1306
+ r0 = nil
1307
+ end
1308
+ end
1309
+ end
1310
+
1311
+ node_cache[:primary][start_index] = r0
1312
+
1313
+ return r0
1314
+ end
1315
+
1316
+ module LabeledSequencePrimary0
1317
+ def label
1318
+ elements[0]
1319
+ end
1320
+
1321
+ def sequence_primary
1322
+ elements[1]
1323
+ end
1324
+ end
1325
+
1326
+ module LabeledSequencePrimary1
1327
+ def compile(lexical_address, builder)
1328
+ sequence_primary.compile(lexical_address, builder)
1329
+ end
1330
+
1331
+ def inline_modules
1332
+ sequence_primary.inline_modules
1333
+ end
1334
+
1335
+ def label_name
1336
+ if label.name
1337
+ label.name
1338
+ elsif sequence_primary.instance_of?(Nonterminal)
1339
+ sequence_primary.text_value
1340
+ else
1341
+ nil
1342
+ end
1343
+ end
1344
+ end
1345
+
1346
+ def _nt_labeled_sequence_primary
1347
+ start_index = index
1348
+ if node_cache[:labeled_sequence_primary].has_key?(index)
1349
+ cached = node_cache[:labeled_sequence_primary][index]
1350
+ @index = cached.interval.end if cached
1351
+ return cached
1352
+ end
1353
+
1354
+ i0, s0 = index, []
1355
+ r1 = _nt_label
1356
+ s0 << r1
1357
+ if r1
1358
+ r2 = _nt_sequence_primary
1359
+ s0 << r2
1360
+ end
1361
+ if s0.last
1362
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1363
+ r0.extend(LabeledSequencePrimary0)
1364
+ r0.extend(LabeledSequencePrimary1)
1365
+ else
1366
+ self.index = i0
1367
+ r0 = nil
1368
+ end
1369
+
1370
+ node_cache[:labeled_sequence_primary][start_index] = r0
1371
+
1372
+ return r0
1373
+ end
1374
+
1375
+ module Label0
1376
+ def alpha_char
1377
+ elements[0]
1378
+ end
1379
+
1380
+ end
1381
+
1382
+ module Label1
1383
+ end
1384
+
1385
+ module Label2
1386
+ def name
1387
+ elements[0].text_value
1388
+ end
1389
+ end
1390
+
1391
+ module Label3
1392
+ def name
1393
+ nil
1394
+ end
1395
+ end
1396
+
1397
+ def _nt_label
1398
+ start_index = index
1399
+ if node_cache[:label].has_key?(index)
1400
+ cached = node_cache[:label][index]
1401
+ @index = cached.interval.end if cached
1402
+ return cached
1403
+ end
1404
+
1405
+ i0 = index
1406
+ i1, s1 = index, []
1407
+ i2, s2 = index, []
1408
+ r3 = _nt_alpha_char
1409
+ s2 << r3
1410
+ if r3
1411
+ s4, i4 = [], index
1412
+ loop do
1413
+ r5 = _nt_alphanumeric_char
1414
+ if r5
1415
+ s4 << r5
1416
+ else
1417
+ break
1418
+ end
1419
+ end
1420
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1421
+ s2 << r4
1422
+ end
1423
+ if s2.last
1424
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1425
+ r2.extend(Label0)
1426
+ else
1427
+ self.index = i2
1428
+ r2 = nil
1429
+ end
1430
+ s1 << r2
1431
+ if r2
1432
+ if input.index(':', index) == index
1433
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1434
+ @index += 1
1435
+ else
1436
+ terminal_parse_failure(':')
1437
+ r6 = nil
1438
+ end
1439
+ s1 << r6
1440
+ end
1441
+ if s1.last
1442
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1443
+ r1.extend(Label1)
1444
+ r1.extend(Label2)
1445
+ else
1446
+ self.index = i1
1447
+ r1 = nil
1448
+ end
1449
+ if r1
1450
+ r0 = r1
1451
+ else
1452
+ if input.index('', index) == index
1453
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 0))
1454
+ r7.extend(Label3)
1455
+ @index += 0
1456
+ else
1457
+ terminal_parse_failure('')
1458
+ r7 = nil
1459
+ end
1460
+ if r7
1461
+ r0 = r7
1462
+ else
1463
+ self.index = i0
1464
+ r0 = nil
1465
+ end
1466
+ end
1467
+
1468
+ node_cache[:label][start_index] = r0
1469
+
1470
+ return r0
1471
+ end
1472
+
1473
+ module SequencePrimary0
1474
+ def prefix
1475
+ elements[0]
1476
+ end
1477
+
1478
+ def atomic
1479
+ elements[1]
1480
+ end
1481
+ end
1482
+
1483
+ module SequencePrimary1
1484
+ def compile(lexical_address, builder)
1485
+ prefix.compile(lexical_address, builder, self)
1486
+ end
1487
+
1488
+ def prefixed_expression
1489
+ elements[1]
1490
+ end
1491
+
1492
+ def inline_modules
1493
+ atomic.inline_modules
1494
+ end
1495
+
1496
+ def inline_module_name
1497
+ nil
1498
+ end
1499
+ end
1500
+
1501
+ module SequencePrimary2
1502
+ def atomic
1503
+ elements[0]
1504
+ end
1505
+
1506
+ def suffix
1507
+ elements[1]
1508
+ end
1509
+ end
1510
+
1511
+ module SequencePrimary3
1512
+ def compile(lexical_address, builder)
1513
+ suffix.compile(lexical_address, builder, self)
1514
+ end
1515
+
1516
+ def node_class_name
1517
+ nil
1518
+ end
1519
+
1520
+ def inline_modules
1521
+ atomic.inline_modules
1522
+ end
1523
+
1524
+ def inline_module_name
1525
+ nil
1526
+ end
1527
+ end
1528
+
1529
+ def _nt_sequence_primary
1530
+ start_index = index
1531
+ if node_cache[:sequence_primary].has_key?(index)
1532
+ cached = node_cache[:sequence_primary][index]
1533
+ @index = cached.interval.end if cached
1534
+ return cached
1535
+ end
1536
+
1537
+ i0 = index
1538
+ i1, s1 = index, []
1539
+ r2 = _nt_prefix
1540
+ s1 << r2
1541
+ if r2
1542
+ r3 = _nt_atomic
1543
+ s1 << r3
1544
+ end
1545
+ if s1.last
1546
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1547
+ r1.extend(SequencePrimary0)
1548
+ r1.extend(SequencePrimary1)
1549
+ else
1550
+ self.index = i1
1551
+ r1 = nil
1552
+ end
1553
+ if r1
1554
+ r0 = r1
1555
+ else
1556
+ i4, s4 = index, []
1557
+ r5 = _nt_atomic
1558
+ s4 << r5
1559
+ if r5
1560
+ r6 = _nt_suffix
1561
+ s4 << r6
1562
+ end
1563
+ if s4.last
1564
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1565
+ r4.extend(SequencePrimary2)
1566
+ r4.extend(SequencePrimary3)
1567
+ else
1568
+ self.index = i4
1569
+ r4 = nil
1570
+ end
1571
+ if r4
1572
+ r0 = r4
1573
+ else
1574
+ r7 = _nt_atomic
1575
+ if r7
1576
+ r0 = r7
1577
+ else
1578
+ self.index = i0
1579
+ r0 = nil
1580
+ end
1581
+ end
1582
+ end
1583
+
1584
+ node_cache[:sequence_primary][start_index] = r0
1585
+
1586
+ return r0
1587
+ end
1588
+
1589
+ def _nt_suffix
1590
+ start_index = index
1591
+ if node_cache[:suffix].has_key?(index)
1592
+ cached = node_cache[:suffix][index]
1593
+ @index = cached.interval.end if cached
1594
+ return cached
1595
+ end
1596
+
1597
+ i0 = index
1598
+ r1 = _nt_repetition_suffix
1599
+ if r1
1600
+ r0 = r1
1601
+ else
1602
+ r2 = _nt_optional_suffix
1603
+ if r2
1604
+ r0 = r2
1605
+ else
1606
+ self.index = i0
1607
+ r0 = nil
1608
+ end
1609
+ end
1610
+
1611
+ node_cache[:suffix][start_index] = r0
1612
+
1613
+ return r0
1614
+ end
1615
+
1616
+ def _nt_optional_suffix
1617
+ start_index = index
1618
+ if node_cache[:optional_suffix].has_key?(index)
1619
+ cached = node_cache[:optional_suffix][index]
1620
+ @index = cached.interval.end if cached
1621
+ return cached
1622
+ end
1623
+
1624
+ if input.index('?', index) == index
1625
+ r0 = instantiate_node(Optional,input, index...(index + 1))
1626
+ @index += 1
1627
+ else
1628
+ terminal_parse_failure('?')
1629
+ r0 = nil
1630
+ end
1631
+
1632
+ node_cache[:optional_suffix][start_index] = r0
1633
+
1634
+ return r0
1635
+ end
1636
+
1637
+ module NodeClassDeclarations0
1638
+ def node_class_expression
1639
+ elements[0]
1640
+ end
1641
+
1642
+ def trailing_inline_module
1643
+ elements[1]
1644
+ end
1645
+ end
1646
+
1647
+ module NodeClassDeclarations1
1648
+ def node_class_name
1649
+ node_class_expression.node_class_name
1650
+ end
1651
+
1652
+ def inline_modules
1653
+ trailing_inline_module.inline_modules
1654
+ end
1655
+
1656
+ def inline_module
1657
+ trailing_inline_module.inline_module
1658
+ end
1659
+
1660
+ def inline_module_name
1661
+ inline_module.module_name if inline_module
1662
+ end
1663
+ end
1664
+
1665
+ def _nt_node_class_declarations
1666
+ start_index = index
1667
+ if node_cache[:node_class_declarations].has_key?(index)
1668
+ cached = node_cache[:node_class_declarations][index]
1669
+ @index = cached.interval.end if cached
1670
+ return cached
1671
+ end
1672
+
1673
+ i0, s0 = index, []
1674
+ r1 = _nt_node_class_expression
1675
+ s0 << r1
1676
+ if r1
1677
+ r2 = _nt_trailing_inline_module
1678
+ s0 << r2
1679
+ end
1680
+ if s0.last
1681
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1682
+ r0.extend(NodeClassDeclarations0)
1683
+ r0.extend(NodeClassDeclarations1)
1684
+ else
1685
+ self.index = i0
1686
+ r0 = nil
1687
+ end
1688
+
1689
+ node_cache[:node_class_declarations][start_index] = r0
1690
+
1691
+ return r0
1692
+ end
1693
+
1694
+ def _nt_repetition_suffix
1695
+ start_index = index
1696
+ if node_cache[:repetition_suffix].has_key?(index)
1697
+ cached = node_cache[:repetition_suffix][index]
1698
+ @index = cached.interval.end if cached
1699
+ return cached
1700
+ end
1701
+
1702
+ i0 = index
1703
+ if input.index('+', index) == index
1704
+ r1 = instantiate_node(OneOrMore,input, index...(index + 1))
1705
+ @index += 1
1706
+ else
1707
+ terminal_parse_failure('+')
1708
+ r1 = nil
1709
+ end
1710
+ if r1
1711
+ r0 = r1
1712
+ else
1713
+ if input.index('*', index) == index
1714
+ r2 = instantiate_node(ZeroOrMore,input, index...(index + 1))
1715
+ @index += 1
1716
+ else
1717
+ terminal_parse_failure('*')
1718
+ r2 = nil
1719
+ end
1720
+ if r2
1721
+ r0 = r2
1722
+ else
1723
+ self.index = i0
1724
+ r0 = nil
1725
+ end
1726
+ end
1727
+
1728
+ node_cache[:repetition_suffix][start_index] = r0
1729
+
1730
+ return r0
1731
+ end
1732
+
1733
+ def _nt_prefix
1734
+ start_index = index
1735
+ if node_cache[:prefix].has_key?(index)
1736
+ cached = node_cache[:prefix][index]
1737
+ @index = cached.interval.end if cached
1738
+ return cached
1739
+ end
1740
+
1741
+ i0 = index
1742
+ if input.index('&', index) == index
1743
+ r1 = instantiate_node(AndPredicate,input, index...(index + 1))
1744
+ @index += 1
1745
+ else
1746
+ terminal_parse_failure('&')
1747
+ r1 = nil
1748
+ end
1749
+ if r1
1750
+ r0 = r1
1751
+ else
1752
+ if input.index('!', index) == index
1753
+ r2 = instantiate_node(NotPredicate,input, index...(index + 1))
1754
+ @index += 1
1755
+ else
1756
+ terminal_parse_failure('!')
1757
+ r2 = nil
1758
+ end
1759
+ if r2
1760
+ r0 = r2
1761
+ else
1762
+ if input.index('~', index) == index
1763
+ r3 = instantiate_node(TransientPrefix,input, index...(index + 1))
1764
+ @index += 1
1765
+ else
1766
+ terminal_parse_failure('~')
1767
+ r3 = nil
1768
+ end
1769
+ if r3
1770
+ r0 = r3
1771
+ else
1772
+ self.index = i0
1773
+ r0 = nil
1774
+ end
1775
+ end
1776
+ end
1777
+
1778
+ node_cache[:prefix][start_index] = r0
1779
+
1780
+ return r0
1781
+ end
1782
+
1783
+ def _nt_atomic
1784
+ start_index = index
1785
+ if node_cache[:atomic].has_key?(index)
1786
+ cached = node_cache[:atomic][index]
1787
+ @index = cached.interval.end if cached
1788
+ return cached
1789
+ end
1790
+
1791
+ i0 = index
1792
+ r1 = _nt_terminal
1793
+ if r1
1794
+ r0 = r1
1795
+ else
1796
+ r2 = _nt_nonterminal
1797
+ if r2
1798
+ r0 = r2
1799
+ else
1800
+ r3 = _nt_parenthesized_expression
1801
+ if r3
1802
+ r0 = r3
1803
+ else
1804
+ self.index = i0
1805
+ r0 = nil
1806
+ end
1807
+ end
1808
+ end
1809
+
1810
+ node_cache[:atomic][start_index] = r0
1811
+
1812
+ return r0
1813
+ end
1814
+
1815
+ module ParenthesizedExpression0
1816
+ def parsing_expression
1817
+ elements[2]
1818
+ end
1819
+
1820
+ end
1821
+
1822
+ module ParenthesizedExpression1
1823
+ def inline_modules
1824
+ parsing_expression.inline_modules
1825
+ end
1826
+ end
1827
+
1828
+ def _nt_parenthesized_expression
1829
+ start_index = index
1830
+ if node_cache[:parenthesized_expression].has_key?(index)
1831
+ cached = node_cache[:parenthesized_expression][index]
1832
+ @index = cached.interval.end if cached
1833
+ return cached
1834
+ end
1835
+
1836
+ i0, s0 = index, []
1837
+ if input.index('(', index) == index
1838
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1839
+ @index += 1
1840
+ else
1841
+ terminal_parse_failure('(')
1842
+ r1 = nil
1843
+ end
1844
+ s0 << r1
1845
+ if r1
1846
+ r3 = _nt_space
1847
+ if r3
1848
+ r2 = r3
1849
+ else
1850
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1851
+ end
1852
+ s0 << r2
1853
+ if r2
1854
+ r4 = _nt_parsing_expression
1855
+ s0 << r4
1856
+ if r4
1857
+ r6 = _nt_space
1858
+ if r6
1859
+ r5 = r6
1860
+ else
1861
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1862
+ end
1863
+ s0 << r5
1864
+ if r5
1865
+ if input.index(')', index) == index
1866
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1867
+ @index += 1
1868
+ else
1869
+ terminal_parse_failure(')')
1870
+ r7 = nil
1871
+ end
1872
+ s0 << r7
1873
+ end
1874
+ end
1875
+ end
1876
+ end
1877
+ if s0.last
1878
+ r0 = instantiate_node(ParenthesizedExpression,input, i0...index, s0)
1879
+ r0.extend(ParenthesizedExpression0)
1880
+ r0.extend(ParenthesizedExpression1)
1881
+ else
1882
+ self.index = i0
1883
+ r0 = nil
1884
+ end
1885
+
1886
+ node_cache[:parenthesized_expression][start_index] = r0
1887
+
1888
+ return r0
1889
+ end
1890
+
1891
+ module Nonterminal0
1892
+ def alpha_char
1893
+ elements[0]
1894
+ end
1895
+
1896
+ end
1897
+
1898
+ module Nonterminal1
1899
+ end
1900
+
1901
+ def _nt_nonterminal
1902
+ start_index = index
1903
+ if node_cache[:nonterminal].has_key?(index)
1904
+ cached = node_cache[:nonterminal][index]
1905
+ @index = cached.interval.end if cached
1906
+ return cached
1907
+ end
1908
+
1909
+ i0, s0 = index, []
1910
+ i1 = index
1911
+ r2 = _nt_keyword_inside_grammar
1912
+ if r2
1913
+ r1 = nil
1914
+ else
1915
+ self.index = i1
1916
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1917
+ end
1918
+ s0 << r1
1919
+ if r1
1920
+ i3, s3 = index, []
1921
+ r4 = _nt_alpha_char
1922
+ s3 << r4
1923
+ if r4
1924
+ s5, i5 = [], index
1925
+ loop do
1926
+ r6 = _nt_alphanumeric_char
1927
+ if r6
1928
+ s5 << r6
1929
+ else
1930
+ break
1931
+ end
1932
+ end
1933
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1934
+ s3 << r5
1935
+ end
1936
+ if s3.last
1937
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1938
+ r3.extend(Nonterminal0)
1939
+ else
1940
+ self.index = i3
1941
+ r3 = nil
1942
+ end
1943
+ s0 << r3
1944
+ end
1945
+ if s0.last
1946
+ r0 = instantiate_node(Nonterminal,input, i0...index, s0)
1947
+ r0.extend(Nonterminal1)
1948
+ else
1949
+ self.index = i0
1950
+ r0 = nil
1951
+ end
1952
+
1953
+ node_cache[:nonterminal][start_index] = r0
1954
+
1955
+ return r0
1956
+ end
1957
+
1958
+ def _nt_terminal
1959
+ start_index = index
1960
+ if node_cache[:terminal].has_key?(index)
1961
+ cached = node_cache[:terminal][index]
1962
+ @index = cached.interval.end if cached
1963
+ return cached
1964
+ end
1965
+
1966
+ i0 = index
1967
+ r1 = _nt_quoted_string
1968
+ if r1
1969
+ r0 = r1
1970
+ else
1971
+ r2 = _nt_character_class
1972
+ if r2
1973
+ r0 = r2
1974
+ else
1975
+ r3 = _nt_anything_symbol
1976
+ if r3
1977
+ r0 = r3
1978
+ else
1979
+ self.index = i0
1980
+ r0 = nil
1981
+ end
1982
+ end
1983
+ end
1984
+
1985
+ node_cache[:terminal][start_index] = r0
1986
+
1987
+ return r0
1988
+ end
1989
+
1990
+ module QuotedString0
1991
+ def string
1992
+ super.text_value
1993
+ end
1994
+ end
1995
+
1996
+ def _nt_quoted_string
1997
+ start_index = index
1998
+ if node_cache[:quoted_string].has_key?(index)
1999
+ cached = node_cache[:quoted_string][index]
2000
+ @index = cached.interval.end if cached
2001
+ return cached
2002
+ end
2003
+
2004
+ i0 = index
2005
+ r1 = _nt_single_quoted_string
2006
+ if r1
2007
+ r0 = r1
2008
+ r0.extend(QuotedString0)
2009
+ else
2010
+ r2 = _nt_double_quoted_string
2011
+ if r2
2012
+ r0 = r2
2013
+ r0.extend(QuotedString0)
2014
+ else
2015
+ self.index = i0
2016
+ r0 = nil
2017
+ end
2018
+ end
2019
+
2020
+ node_cache[:quoted_string][start_index] = r0
2021
+
2022
+ return r0
2023
+ end
2024
+
2025
+ module DoubleQuotedString0
2026
+ end
2027
+
2028
+ module DoubleQuotedString1
2029
+ def string
2030
+ elements[1]
2031
+ end
2032
+
2033
+ end
2034
+
2035
+ def _nt_double_quoted_string
2036
+ start_index = index
2037
+ if node_cache[:double_quoted_string].has_key?(index)
2038
+ cached = node_cache[:double_quoted_string][index]
2039
+ @index = cached.interval.end if cached
2040
+ return cached
2041
+ end
2042
+
2043
+ i0, s0 = index, []
2044
+ if input.index('"', index) == index
2045
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2046
+ @index += 1
2047
+ else
2048
+ terminal_parse_failure('"')
2049
+ r1 = nil
2050
+ end
2051
+ s0 << r1
2052
+ if r1
2053
+ s2, i2 = [], index
2054
+ loop do
2055
+ i3, s3 = index, []
2056
+ i4 = index
2057
+ if input.index('"', index) == index
2058
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2059
+ @index += 1
2060
+ else
2061
+ terminal_parse_failure('"')
2062
+ r5 = nil
2063
+ end
2064
+ if r5
2065
+ r4 = nil
2066
+ else
2067
+ self.index = i4
2068
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2069
+ end
2070
+ s3 << r4
2071
+ if r4
2072
+ i6 = index
2073
+ if input.index("\\\\", index) == index
2074
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
2075
+ @index += 2
2076
+ else
2077
+ terminal_parse_failure("\\\\")
2078
+ r7 = nil
2079
+ end
2080
+ if r7
2081
+ r6 = r7
2082
+ else
2083
+ if input.index('\"', index) == index
2084
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
2085
+ @index += 2
2086
+ else
2087
+ terminal_parse_failure('\"')
2088
+ r8 = nil
2089
+ end
2090
+ if r8
2091
+ r6 = r8
2092
+ else
2093
+ if index < input_length
2094
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2095
+ @index += 1
2096
+ else
2097
+ terminal_parse_failure("any character")
2098
+ r9 = nil
2099
+ end
2100
+ if r9
2101
+ r6 = r9
2102
+ else
2103
+ self.index = i6
2104
+ r6 = nil
2105
+ end
2106
+ end
2107
+ end
2108
+ s3 << r6
2109
+ end
2110
+ if s3.last
2111
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2112
+ r3.extend(DoubleQuotedString0)
2113
+ else
2114
+ self.index = i3
2115
+ r3 = nil
2116
+ end
2117
+ if r3
2118
+ s2 << r3
2119
+ else
2120
+ break
2121
+ end
2122
+ end
2123
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2124
+ s0 << r2
2125
+ if r2
2126
+ if input.index('"', index) == index
2127
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
2128
+ @index += 1
2129
+ else
2130
+ terminal_parse_failure('"')
2131
+ r10 = nil
2132
+ end
2133
+ s0 << r10
2134
+ end
2135
+ end
2136
+ if s0.last
2137
+ r0 = instantiate_node(Terminal,input, i0...index, s0)
2138
+ r0.extend(DoubleQuotedString1)
2139
+ else
2140
+ self.index = i0
2141
+ r0 = nil
2142
+ end
2143
+
2144
+ node_cache[:double_quoted_string][start_index] = r0
2145
+
2146
+ return r0
2147
+ end
2148
+
2149
+ module SingleQuotedString0
2150
+ end
2151
+
2152
+ module SingleQuotedString1
2153
+ def string
2154
+ elements[1]
2155
+ end
2156
+
2157
+ end
2158
+
2159
+ def _nt_single_quoted_string
2160
+ start_index = index
2161
+ if node_cache[:single_quoted_string].has_key?(index)
2162
+ cached = node_cache[:single_quoted_string][index]
2163
+ @index = cached.interval.end if cached
2164
+ return cached
2165
+ end
2166
+
2167
+ i0, s0 = index, []
2168
+ if input.index("'", index) == index
2169
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2170
+ @index += 1
2171
+ else
2172
+ terminal_parse_failure("'")
2173
+ r1 = nil
2174
+ end
2175
+ s0 << r1
2176
+ if r1
2177
+ s2, i2 = [], index
2178
+ loop do
2179
+ i3, s3 = index, []
2180
+ i4 = index
2181
+ if input.index("'", index) == index
2182
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2183
+ @index += 1
2184
+ else
2185
+ terminal_parse_failure("'")
2186
+ r5 = nil
2187
+ end
2188
+ if r5
2189
+ r4 = nil
2190
+ else
2191
+ self.index = i4
2192
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2193
+ end
2194
+ s3 << r4
2195
+ if r4
2196
+ i6 = index
2197
+ if input.index("\\\\", index) == index
2198
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
2199
+ @index += 2
2200
+ else
2201
+ terminal_parse_failure("\\\\")
2202
+ r7 = nil
2203
+ end
2204
+ if r7
2205
+ r6 = r7
2206
+ else
2207
+ if input.index("\\'", index) == index
2208
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
2209
+ @index += 2
2210
+ else
2211
+ terminal_parse_failure("\\'")
2212
+ r8 = nil
2213
+ end
2214
+ if r8
2215
+ r6 = r8
2216
+ else
2217
+ if index < input_length
2218
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2219
+ @index += 1
2220
+ else
2221
+ terminal_parse_failure("any character")
2222
+ r9 = nil
2223
+ end
2224
+ if r9
2225
+ r6 = r9
2226
+ else
2227
+ self.index = i6
2228
+ r6 = nil
2229
+ end
2230
+ end
2231
+ end
2232
+ s3 << r6
2233
+ end
2234
+ if s3.last
2235
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2236
+ r3.extend(SingleQuotedString0)
2237
+ else
2238
+ self.index = i3
2239
+ r3 = nil
2240
+ end
2241
+ if r3
2242
+ s2 << r3
2243
+ else
2244
+ break
2245
+ end
2246
+ end
2247
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2248
+ s0 << r2
2249
+ if r2
2250
+ if input.index("'", index) == index
2251
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
2252
+ @index += 1
2253
+ else
2254
+ terminal_parse_failure("'")
2255
+ r10 = nil
2256
+ end
2257
+ s0 << r10
2258
+ end
2259
+ end
2260
+ if s0.last
2261
+ r0 = instantiate_node(Terminal,input, i0...index, s0)
2262
+ r0.extend(SingleQuotedString1)
2263
+ else
2264
+ self.index = i0
2265
+ r0 = nil
2266
+ end
2267
+
2268
+ node_cache[:single_quoted_string][start_index] = r0
2269
+
2270
+ return r0
2271
+ end
2272
+
2273
+ module CharacterClass0
2274
+ end
2275
+
2276
+ module CharacterClass1
2277
+ end
2278
+
2279
+ module CharacterClass2
2280
+ end
2281
+
2282
+ module CharacterClass3
2283
+ def characters
2284
+ elements[1]
2285
+ end
2286
+
2287
+ end
2288
+
2289
+ module CharacterClass4
2290
+ def characters
2291
+ super.text_value
2292
+ end
2293
+ end
2294
+
2295
+ def _nt_character_class
2296
+ start_index = index
2297
+ if node_cache[:character_class].has_key?(index)
2298
+ cached = node_cache[:character_class][index]
2299
+ @index = cached.interval.end if cached
2300
+ return cached
2301
+ end
2302
+
2303
+ i0, s0 = index, []
2304
+ if input.index('[', index) == index
2305
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2306
+ @index += 1
2307
+ else
2308
+ terminal_parse_failure('[')
2309
+ r1 = nil
2310
+ end
2311
+ s0 << r1
2312
+ if r1
2313
+ s2, i2 = [], index
2314
+ loop do
2315
+ i3, s3 = index, []
2316
+ i4 = index
2317
+ if input.index(']', index) == index
2318
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2319
+ @index += 1
2320
+ else
2321
+ terminal_parse_failure(']')
2322
+ r5 = nil
2323
+ end
2324
+ if r5
2325
+ r4 = nil
2326
+ else
2327
+ self.index = i4
2328
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2329
+ end
2330
+ s3 << r4
2331
+ if r4
2332
+ i6 = index
2333
+ i7, s7 = index, []
2334
+ if input.index('\\', index) == index
2335
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2336
+ @index += 1
2337
+ else
2338
+ terminal_parse_failure('\\')
2339
+ r8 = nil
2340
+ end
2341
+ s7 << r8
2342
+ if r8
2343
+ if index < input_length
2344
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2345
+ @index += 1
2346
+ else
2347
+ terminal_parse_failure("any character")
2348
+ r9 = nil
2349
+ end
2350
+ s7 << r9
2351
+ end
2352
+ if s7.last
2353
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
2354
+ r7.extend(CharacterClass0)
2355
+ else
2356
+ self.index = i7
2357
+ r7 = nil
2358
+ end
2359
+ if r7
2360
+ r6 = r7
2361
+ else
2362
+ i10, s10 = index, []
2363
+ i11 = index
2364
+ if input.index('\\', index) == index
2365
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
2366
+ @index += 1
2367
+ else
2368
+ terminal_parse_failure('\\')
2369
+ r12 = nil
2370
+ end
2371
+ if r12
2372
+ r11 = nil
2373
+ else
2374
+ self.index = i11
2375
+ r11 = instantiate_node(SyntaxNode,input, index...index)
2376
+ end
2377
+ s10 << r11
2378
+ if r11
2379
+ if index < input_length
2380
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
2381
+ @index += 1
2382
+ else
2383
+ terminal_parse_failure("any character")
2384
+ r13 = nil
2385
+ end
2386
+ s10 << r13
2387
+ end
2388
+ if s10.last
2389
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
2390
+ r10.extend(CharacterClass1)
2391
+ else
2392
+ self.index = i10
2393
+ r10 = nil
2394
+ end
2395
+ if r10
2396
+ r6 = r10
2397
+ else
2398
+ self.index = i6
2399
+ r6 = nil
2400
+ end
2401
+ end
2402
+ s3 << r6
2403
+ end
2404
+ if s3.last
2405
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2406
+ r3.extend(CharacterClass2)
2407
+ else
2408
+ self.index = i3
2409
+ r3 = nil
2410
+ end
2411
+ if r3
2412
+ s2 << r3
2413
+ else
2414
+ break
2415
+ end
2416
+ end
2417
+ if s2.empty?
2418
+ self.index = i2
2419
+ r2 = nil
2420
+ else
2421
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2422
+ end
2423
+ s0 << r2
2424
+ if r2
2425
+ if input.index(']', index) == index
2426
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
2427
+ @index += 1
2428
+ else
2429
+ terminal_parse_failure(']')
2430
+ r14 = nil
2431
+ end
2432
+ s0 << r14
2433
+ end
2434
+ end
2435
+ if s0.last
2436
+ r0 = instantiate_node(CharacterClass,input, i0...index, s0)
2437
+ r0.extend(CharacterClass3)
2438
+ r0.extend(CharacterClass4)
2439
+ else
2440
+ self.index = i0
2441
+ r0 = nil
2442
+ end
2443
+
2444
+ node_cache[:character_class][start_index] = r0
2445
+
2446
+ return r0
2447
+ end
2448
+
2449
+ def _nt_anything_symbol
2450
+ start_index = index
2451
+ if node_cache[:anything_symbol].has_key?(index)
2452
+ cached = node_cache[:anything_symbol][index]
2453
+ @index = cached.interval.end if cached
2454
+ return cached
2455
+ end
2456
+
2457
+ if input.index('.', index) == index
2458
+ r0 = instantiate_node(AnythingSymbol,input, index...(index + 1))
2459
+ @index += 1
2460
+ else
2461
+ terminal_parse_failure('.')
2462
+ r0 = nil
2463
+ end
2464
+
2465
+ node_cache[:anything_symbol][start_index] = r0
2466
+
2467
+ return r0
2468
+ end
2469
+
2470
+ module NodeClassExpression0
2471
+ end
2472
+
2473
+ module NodeClassExpression1
2474
+ def space
2475
+ elements[0]
2476
+ end
2477
+
2478
+ end
2479
+
2480
+ module NodeClassExpression2
2481
+ def node_class_name
2482
+ elements[2].text_value
2483
+ end
2484
+ end
2485
+
2486
+ module NodeClassExpression3
2487
+ def node_class_name
2488
+ nil
2489
+ end
2490
+ end
2491
+
2492
+ def _nt_node_class_expression
2493
+ start_index = index
2494
+ if node_cache[:node_class_expression].has_key?(index)
2495
+ cached = node_cache[:node_class_expression][index]
2496
+ @index = cached.interval.end if cached
2497
+ return cached
2498
+ end
2499
+
2500
+ i0 = index
2501
+ i1, s1 = index, []
2502
+ r2 = _nt_space
2503
+ s1 << r2
2504
+ if r2
2505
+ if input.index('<', index) == index
2506
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2507
+ @index += 1
2508
+ else
2509
+ terminal_parse_failure('<')
2510
+ r3 = nil
2511
+ end
2512
+ s1 << r3
2513
+ if r3
2514
+ s4, i4 = [], index
2515
+ loop do
2516
+ i5, s5 = index, []
2517
+ i6 = index
2518
+ if input.index('>', index) == index
2519
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2520
+ @index += 1
2521
+ else
2522
+ terminal_parse_failure('>')
2523
+ r7 = nil
2524
+ end
2525
+ if r7
2526
+ r6 = nil
2527
+ else
2528
+ self.index = i6
2529
+ r6 = instantiate_node(SyntaxNode,input, index...index)
2530
+ end
2531
+ s5 << r6
2532
+ if r6
2533
+ if index < input_length
2534
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2535
+ @index += 1
2536
+ else
2537
+ terminal_parse_failure("any character")
2538
+ r8 = nil
2539
+ end
2540
+ s5 << r8
2541
+ end
2542
+ if s5.last
2543
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2544
+ r5.extend(NodeClassExpression0)
2545
+ else
2546
+ self.index = i5
2547
+ r5 = nil
2548
+ end
2549
+ if r5
2550
+ s4 << r5
2551
+ else
2552
+ break
2553
+ end
2554
+ end
2555
+ if s4.empty?
2556
+ self.index = i4
2557
+ r4 = nil
2558
+ else
2559
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2560
+ end
2561
+ s1 << r4
2562
+ if r4
2563
+ if input.index('>', index) == index
2564
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2565
+ @index += 1
2566
+ else
2567
+ terminal_parse_failure('>')
2568
+ r9 = nil
2569
+ end
2570
+ s1 << r9
2571
+ end
2572
+ end
2573
+ end
2574
+ if s1.last
2575
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2576
+ r1.extend(NodeClassExpression1)
2577
+ r1.extend(NodeClassExpression2)
2578
+ else
2579
+ self.index = i1
2580
+ r1 = nil
2581
+ end
2582
+ if r1
2583
+ r0 = r1
2584
+ else
2585
+ if input.index('', index) == index
2586
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 0))
2587
+ r10.extend(NodeClassExpression3)
2588
+ @index += 0
2589
+ else
2590
+ terminal_parse_failure('')
2591
+ r10 = nil
2592
+ end
2593
+ if r10
2594
+ r0 = r10
2595
+ else
2596
+ self.index = i0
2597
+ r0 = nil
2598
+ end
2599
+ end
2600
+
2601
+ node_cache[:node_class_expression][start_index] = r0
2602
+
2603
+ return r0
2604
+ end
2605
+
2606
+ module TrailingInlineModule0
2607
+ def space
2608
+ elements[0]
2609
+ end
2610
+
2611
+ def inline_module
2612
+ elements[1]
2613
+ end
2614
+ end
2615
+
2616
+ module TrailingInlineModule1
2617
+ def inline_modules
2618
+ [inline_module]
2619
+ end
2620
+
2621
+ def inline_module_name
2622
+ inline_module.module_name
2623
+ end
2624
+ end
2625
+
2626
+ module TrailingInlineModule2
2627
+ def inline_modules
2628
+ []
2629
+ end
2630
+
2631
+ def inline_module
2632
+ nil
2633
+ end
2634
+
2635
+ def inline_module_name
2636
+ nil
2637
+ end
2638
+ end
2639
+
2640
+ def _nt_trailing_inline_module
2641
+ start_index = index
2642
+ if node_cache[:trailing_inline_module].has_key?(index)
2643
+ cached = node_cache[:trailing_inline_module][index]
2644
+ @index = cached.interval.end if cached
2645
+ return cached
2646
+ end
2647
+
2648
+ i0 = index
2649
+ i1, s1 = index, []
2650
+ r2 = _nt_space
2651
+ s1 << r2
2652
+ if r2
2653
+ r3 = _nt_inline_module
2654
+ s1 << r3
2655
+ end
2656
+ if s1.last
2657
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2658
+ r1.extend(TrailingInlineModule0)
2659
+ r1.extend(TrailingInlineModule1)
2660
+ else
2661
+ self.index = i1
2662
+ r1 = nil
2663
+ end
2664
+ if r1
2665
+ r0 = r1
2666
+ else
2667
+ if input.index('', index) == index
2668
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 0))
2669
+ r4.extend(TrailingInlineModule2)
2670
+ @index += 0
2671
+ else
2672
+ terminal_parse_failure('')
2673
+ r4 = nil
2674
+ end
2675
+ if r4
2676
+ r0 = r4
2677
+ else
2678
+ self.index = i0
2679
+ r0 = nil
2680
+ end
2681
+ end
2682
+
2683
+ node_cache[:trailing_inline_module][start_index] = r0
2684
+
2685
+ return r0
2686
+ end
2687
+
2688
+ module InlineModule0
2689
+ end
2690
+
2691
+ module InlineModule1
2692
+ end
2693
+
2694
+ def _nt_inline_module
2695
+ start_index = index
2696
+ if node_cache[:inline_module].has_key?(index)
2697
+ cached = node_cache[:inline_module][index]
2698
+ @index = cached.interval.end if cached
2699
+ return cached
2700
+ end
2701
+
2702
+ i0, s0 = index, []
2703
+ if input.index('{', index) == index
2704
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2705
+ @index += 1
2706
+ else
2707
+ terminal_parse_failure('{')
2708
+ r1 = nil
2709
+ end
2710
+ s0 << r1
2711
+ if r1
2712
+ s2, i2 = [], index
2713
+ loop do
2714
+ i3 = index
2715
+ r4 = _nt_inline_module
2716
+ if r4
2717
+ r3 = r4
2718
+ else
2719
+ i5, s5 = index, []
2720
+ i6 = index
2721
+ if input.index(Regexp.new('[{}]'), index) == index
2722
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2723
+ @index += 1
2724
+ else
2725
+ r7 = nil
2726
+ end
2727
+ if r7
2728
+ r6 = nil
2729
+ else
2730
+ self.index = i6
2731
+ r6 = instantiate_node(SyntaxNode,input, index...index)
2732
+ end
2733
+ s5 << r6
2734
+ if r6
2735
+ if index < input_length
2736
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2737
+ @index += 1
2738
+ else
2739
+ terminal_parse_failure("any character")
2740
+ r8 = nil
2741
+ end
2742
+ s5 << r8
2743
+ end
2744
+ if s5.last
2745
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2746
+ r5.extend(InlineModule0)
2747
+ else
2748
+ self.index = i5
2749
+ r5 = nil
2750
+ end
2751
+ if r5
2752
+ r3 = r5
2753
+ else
2754
+ self.index = i3
2755
+ r3 = nil
2756
+ end
2757
+ end
2758
+ if r3
2759
+ s2 << r3
2760
+ else
2761
+ break
2762
+ end
2763
+ end
2764
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2765
+ s0 << r2
2766
+ if r2
2767
+ if input.index('}', index) == index
2768
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2769
+ @index += 1
2770
+ else
2771
+ terminal_parse_failure('}')
2772
+ r9 = nil
2773
+ end
2774
+ s0 << r9
2775
+ end
2776
+ end
2777
+ if s0.last
2778
+ r0 = instantiate_node(InlineModule,input, i0...index, s0)
2779
+ r0.extend(InlineModule1)
2780
+ else
2781
+ self.index = i0
2782
+ r0 = nil
2783
+ end
2784
+
2785
+ node_cache[:inline_module][start_index] = r0
2786
+
2787
+ return r0
2788
+ end
2789
+
2790
+ module KeywordInsideGrammar0
2791
+ end
2792
+
2793
+ def _nt_keyword_inside_grammar
2794
+ start_index = index
2795
+ if node_cache[:keyword_inside_grammar].has_key?(index)
2796
+ cached = node_cache[:keyword_inside_grammar][index]
2797
+ @index = cached.interval.end if cached
2798
+ return cached
2799
+ end
2800
+
2801
+ i0, s0 = index, []
2802
+ i1 = index
2803
+ if input.index('rule', index) == index
2804
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 4))
2805
+ @index += 4
2806
+ else
2807
+ terminal_parse_failure('rule')
2808
+ r2 = nil
2809
+ end
2810
+ if r2
2811
+ r1 = r2
2812
+ else
2813
+ if input.index('end', index) == index
2814
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
2815
+ @index += 3
2816
+ else
2817
+ terminal_parse_failure('end')
2818
+ r3 = nil
2819
+ end
2820
+ if r3
2821
+ r1 = r3
2822
+ else
2823
+ self.index = i1
2824
+ r1 = nil
2825
+ end
2826
+ end
2827
+ s0 << r1
2828
+ if r1
2829
+ i4 = index
2830
+ r5 = _nt_non_space_char
2831
+ if r5
2832
+ r4 = nil
2833
+ else
2834
+ self.index = i4
2835
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2836
+ end
2837
+ s0 << r4
2838
+ end
2839
+ if s0.last
2840
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2841
+ r0.extend(KeywordInsideGrammar0)
2842
+ else
2843
+ self.index = i0
2844
+ r0 = nil
2845
+ end
2846
+
2847
+ node_cache[:keyword_inside_grammar][start_index] = r0
2848
+
2849
+ return r0
2850
+ end
2851
+
2852
+ module NonSpaceChar0
2853
+ end
2854
+
2855
+ def _nt_non_space_char
2856
+ start_index = index
2857
+ if node_cache[:non_space_char].has_key?(index)
2858
+ cached = node_cache[:non_space_char][index]
2859
+ @index = cached.interval.end if cached
2860
+ return cached
2861
+ end
2862
+
2863
+ i0, s0 = index, []
2864
+ i1 = index
2865
+ r2 = _nt_space
2866
+ if r2
2867
+ r1 = nil
2868
+ else
2869
+ self.index = i1
2870
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2871
+ end
2872
+ s0 << r1
2873
+ if r1
2874
+ if index < input_length
2875
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2876
+ @index += 1
2877
+ else
2878
+ terminal_parse_failure("any character")
2879
+ r3 = nil
2880
+ end
2881
+ s0 << r3
2882
+ end
2883
+ if s0.last
2884
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2885
+ r0.extend(NonSpaceChar0)
2886
+ else
2887
+ self.index = i0
2888
+ r0 = nil
2889
+ end
2890
+
2891
+ node_cache[:non_space_char][start_index] = r0
2892
+
2893
+ return r0
2894
+ end
2895
+
2896
+ def _nt_alpha_char
2897
+ start_index = index
2898
+ if node_cache[:alpha_char].has_key?(index)
2899
+ cached = node_cache[:alpha_char][index]
2900
+ @index = cached.interval.end if cached
2901
+ return cached
2902
+ end
2903
+
2904
+ if input.index(Regexp.new('[A-Za-z_]'), index) == index
2905
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
2906
+ @index += 1
2907
+ else
2908
+ r0 = nil
2909
+ end
2910
+
2911
+ node_cache[:alpha_char][start_index] = r0
2912
+
2913
+ return r0
2914
+ end
2915
+
2916
+ def _nt_alphanumeric_char
2917
+ start_index = index
2918
+ if node_cache[:alphanumeric_char].has_key?(index)
2919
+ cached = node_cache[:alphanumeric_char][index]
2920
+ @index = cached.interval.end if cached
2921
+ return cached
2922
+ end
2923
+
2924
+ i0 = index
2925
+ r1 = _nt_alpha_char
2926
+ if r1
2927
+ r0 = r1
2928
+ else
2929
+ if input.index(Regexp.new('[0-9]'), index) == index
2930
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2931
+ @index += 1
2932
+ else
2933
+ r2 = nil
2934
+ end
2935
+ if r2
2936
+ r0 = r2
2937
+ else
2938
+ self.index = i0
2939
+ r0 = nil
2940
+ end
2941
+ end
2942
+
2943
+ node_cache[:alphanumeric_char][start_index] = r0
2944
+
2945
+ return r0
2946
+ end
2947
+
2948
+ def _nt_space
2949
+ start_index = index
2950
+ if node_cache[:space].has_key?(index)
2951
+ cached = node_cache[:space][index]
2952
+ @index = cached.interval.end if cached
2953
+ return cached
2954
+ end
2955
+
2956
+ s0, i0 = [], index
2957
+ loop do
2958
+ i1 = index
2959
+ r2 = _nt_white
2960
+ if r2
2961
+ r1 = r2
2962
+ else
2963
+ r3 = _nt_comment_to_eol
2964
+ if r3
2965
+ r1 = r3
2966
+ else
2967
+ self.index = i1
2968
+ r1 = nil
2969
+ end
2970
+ end
2971
+ if r1
2972
+ s0 << r1
2973
+ else
2974
+ break
2975
+ end
2976
+ end
2977
+ if s0.empty?
2978
+ self.index = i0
2979
+ r0 = nil
2980
+ else
2981
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2982
+ end
2983
+
2984
+ node_cache[:space][start_index] = r0
2985
+
2986
+ return r0
2987
+ end
2988
+
2989
+ module CommentToEol0
2990
+ end
2991
+
2992
+ module CommentToEol1
2993
+ end
2994
+
2995
+ def _nt_comment_to_eol
2996
+ start_index = index
2997
+ if node_cache[:comment_to_eol].has_key?(index)
2998
+ cached = node_cache[:comment_to_eol][index]
2999
+ @index = cached.interval.end if cached
3000
+ return cached
3001
+ end
3002
+
3003
+ i0, s0 = index, []
3004
+ if input.index('#', index) == index
3005
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3006
+ @index += 1
3007
+ else
3008
+ terminal_parse_failure('#')
3009
+ r1 = nil
3010
+ end
3011
+ s0 << r1
3012
+ if r1
3013
+ s2, i2 = [], index
3014
+ loop do
3015
+ i3, s3 = index, []
3016
+ i4 = index
3017
+ if input.index("\n", index) == index
3018
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
3019
+ @index += 1
3020
+ else
3021
+ terminal_parse_failure("\n")
3022
+ r5 = nil
3023
+ end
3024
+ if r5
3025
+ r4 = nil
3026
+ else
3027
+ self.index = i4
3028
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3029
+ end
3030
+ s3 << r4
3031
+ if r4
3032
+ if index < input_length
3033
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
3034
+ @index += 1
3035
+ else
3036
+ terminal_parse_failure("any character")
3037
+ r6 = nil
3038
+ end
3039
+ s3 << r6
3040
+ end
3041
+ if s3.last
3042
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3043
+ r3.extend(CommentToEol0)
3044
+ else
3045
+ self.index = i3
3046
+ r3 = nil
3047
+ end
3048
+ if r3
3049
+ s2 << r3
3050
+ else
3051
+ break
3052
+ end
3053
+ end
3054
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3055
+ s0 << r2
3056
+ end
3057
+ if s0.last
3058
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3059
+ r0.extend(CommentToEol1)
3060
+ else
3061
+ self.index = i0
3062
+ r0 = nil
3063
+ end
3064
+
3065
+ node_cache[:comment_to_eol][start_index] = r0
3066
+
3067
+ return r0
3068
+ end
3069
+
3070
+ def _nt_white
3071
+ start_index = index
3072
+ if node_cache[:white].has_key?(index)
3073
+ cached = node_cache[:white][index]
3074
+ @index = cached.interval.end if cached
3075
+ return cached
3076
+ end
3077
+
3078
+ if input.index(Regexp.new('[ \\t\\n\\r]'), index) == index
3079
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3080
+ @index += 1
3081
+ else
3082
+ r0 = nil
3083
+ end
3084
+
3085
+ node_cache[:white][start_index] = r0
3086
+
3087
+ return r0
3088
+ end
3089
+
3090
+ end
3091
+
3092
+ class MetagrammarParser < Treetop::Runtime::CompiledParser
3093
+ include Metagrammar
3094
+ end
3095
+
3096
+ end
3097
+ end