rattler 0.2.2 → 0.3.0
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.
- data/README.rdoc +83 -64
- data/features/grammar/comments.feature +24 -0
- data/features/grammar/list_matching.feature +41 -0
- data/features/grammar/symantic_action.feature +30 -12
- data/lib/rattler/back_end/parser_generator/assert_generator.rb +27 -27
- data/lib/rattler/back_end/parser_generator/choice_generator.rb +29 -29
- data/lib/rattler/back_end/parser_generator/direct_action_generator.rb +17 -17
- data/lib/rattler/back_end/parser_generator/disallow_generator.rb +27 -27
- data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rb +17 -17
- data/lib/rattler/back_end/parser_generator/expr_generator.rb +129 -40
- data/lib/rattler/back_end/parser_generator/label_generator.rb +15 -15
- data/lib/rattler/back_end/parser_generator/list1_generator.rb +61 -0
- data/lib/rattler/back_end/parser_generator/list_generating.rb +71 -0
- data/lib/rattler/back_end/parser_generator/list_generator.rb +57 -0
- data/lib/rattler/back_end/parser_generator/one_or_more_generator.rb +14 -15
- data/lib/rattler/back_end/parser_generator/optional_generator.rb +24 -24
- data/lib/rattler/back_end/parser_generator/predicate_propogating.rb +9 -9
- data/lib/rattler/back_end/parser_generator/repeat_generating.rb +16 -16
- data/lib/rattler/back_end/parser_generator/sequence_generator.rb +40 -40
- data/lib/rattler/back_end/parser_generator/skip_generator.rb +18 -18
- data/lib/rattler/back_end/parser_generator/skip_propogating.rb +5 -5
- data/lib/rattler/back_end/parser_generator/sub_generating.rb +128 -0
- data/lib/rattler/back_end/parser_generator/token_generator.rb +15 -15
- data/lib/rattler/back_end/parser_generator/token_propogating.rb +1 -1
- data/lib/rattler/back_end/parser_generator/zero_or_more_generator.rb +12 -13
- data/lib/rattler/back_end/parser_generator.rb +10 -7
- data/lib/rattler/grammar/grammar_parser.rb +16 -21
- data/lib/rattler/grammar/metagrammar.rb +1039 -1035
- data/lib/rattler/grammar/rattler.rtlr +28 -28
- data/lib/rattler/parsers/action_code.rb +20 -9
- data/lib/rattler/parsers/fail.rb +7 -1
- data/lib/rattler/parsers/list.rb +57 -0
- data/lib/rattler/parsers/list1.rb +58 -0
- data/lib/rattler/parsers/parser_dsl.rb +60 -38
- data/lib/rattler/parsers.rb +5 -3
- data/lib/rattler/runtime/extended_packrat_parser.rb +88 -20
- data/lib/rattler/runtime/packrat_parser.rb +21 -14
- data/lib/rattler/runtime/parser.rb +74 -18
- data/lib/rattler/runtime/recursive_descent_parser.rb +15 -46
- data/spec/rattler/back_end/compiler_spec.rb +173 -107
- data/spec/rattler/back_end/parser_generator/list1_generator_spec.rb +304 -0
- data/spec/rattler/back_end/parser_generator/list_generator_spec.rb +288 -0
- data/spec/rattler/grammar/grammar_parser_spec.rb +65 -76
- data/spec/rattler/parsers/action_code_spec.rb +84 -34
- data/spec/rattler/parsers/direct_action_spec.rb +56 -34
- data/spec/rattler/parsers/fail_spec.rb +20 -0
- data/spec/rattler/parsers/list1_spec.rb +82 -0
- data/spec/rattler/parsers/list_spec.rb +82 -0
- data/spec/rattler/parsers/parser_dsl_spec.rb +48 -19
- data/spec/rattler/runtime/extended_packrat_parser_spec.rb +0 -1
- metadata +92 -173
- data/bin/rtlr.bat +0 -3
- data/lib/rattler/back_end/parser_generator/generator_helper.rb +0 -130
- data/lib/rattler/back_end/parser_generator/generators.rb +0 -86
- data/lib/rattler/back_end/parser_generator/nested_generators.rb +0 -15
- data/lib/rattler/back_end/parser_generator/top_level_generators.rb +0 -15
metadata
CHANGED
@@ -1,196 +1,104 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rattler
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 2
|
10
|
-
version: 0.2.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Jason Arhart
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-02-24 00:00:00.000000000 -08:00
|
13
|
+
default_executable: rtlr
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: bundler
|
23
|
-
|
17
|
+
requirement: &78063500 !ruby/object:Gem::Requirement
|
24
18
|
none: false
|
25
|
-
requirements:
|
19
|
+
requirements:
|
26
20
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 23
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 0
|
32
|
-
- 0
|
21
|
+
- !ruby/object:Gem::Version
|
33
22
|
version: 1.0.0
|
34
|
-
prerelease: false
|
35
23
|
type: :development
|
36
|
-
|
37
|
-
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *78063500
|
26
|
+
- !ruby/object:Gem::Dependency
|
38
27
|
name: jeweler
|
39
|
-
|
28
|
+
requirement: &78062620 !ruby/object:Gem::Requirement
|
40
29
|
none: false
|
41
|
-
requirements:
|
30
|
+
requirements:
|
42
31
|
- - ~>
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 7
|
45
|
-
segments:
|
46
|
-
- 1
|
47
|
-
- 5
|
48
|
-
- 2
|
32
|
+
- !ruby/object:Gem::Version
|
49
33
|
version: 1.5.2
|
50
|
-
prerelease: false
|
51
34
|
type: :development
|
52
|
-
|
53
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *78062620
|
37
|
+
- !ruby/object:Gem::Dependency
|
54
38
|
name: rspec
|
55
|
-
|
39
|
+
requirement: &78061750 !ruby/object:Gem::Requirement
|
56
40
|
none: false
|
57
|
-
requirements:
|
58
|
-
- -
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
hash: 3
|
61
|
-
segments:
|
62
|
-
- 2
|
63
|
-
- 3
|
64
|
-
- 0
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
65
44
|
version: 2.3.0
|
66
|
-
prerelease: false
|
67
45
|
type: :development
|
68
|
-
|
69
|
-
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *78061750
|
48
|
+
- !ruby/object:Gem::Dependency
|
70
49
|
name: cucumber
|
71
|
-
|
50
|
+
requirement: &78061040 !ruby/object:Gem::Requirement
|
72
51
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
hash: 63
|
77
|
-
segments:
|
78
|
-
- 0
|
79
|
-
- 8
|
80
|
-
- 0
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
81
55
|
version: 0.8.0
|
82
|
-
prerelease: false
|
83
56
|
type: :development
|
84
|
-
|
85
|
-
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *78061040
|
59
|
+
- !ruby/object:Gem::Dependency
|
86
60
|
name: aruba
|
87
|
-
|
61
|
+
requirement: &78060020 !ruby/object:Gem::Requirement
|
88
62
|
none: false
|
89
|
-
requirements:
|
90
|
-
- -
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
hash: 19
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
- 3
|
96
|
-
- 0
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
97
66
|
version: 0.3.0
|
98
|
-
prerelease: false
|
99
|
-
type: :development
|
100
|
-
requirement: *id005
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: yard
|
103
|
-
version_requirements: &id006 !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
|
-
requirements:
|
106
|
-
- - ">="
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
hash: 7
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
- 6
|
112
|
-
- 0
|
113
|
-
version: 0.6.0
|
114
|
-
prerelease: false
|
115
67
|
type: :development
|
116
|
-
requirement: *id006
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rspec
|
119
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
hash: 3
|
125
|
-
segments:
|
126
|
-
- 2
|
127
|
-
- 3
|
128
|
-
- 0
|
129
|
-
version: 2.3.0
|
130
68
|
prerelease: false
|
131
|
-
|
132
|
-
|
133
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *78060020
|
70
|
+
- !ruby/object:Gem::Dependency
|
134
71
|
name: yard
|
135
|
-
|
72
|
+
requirement: &78059060 !ruby/object:Gem::Requirement
|
136
73
|
none: false
|
137
|
-
requirements:
|
138
|
-
- -
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
hash: 7
|
141
|
-
segments:
|
142
|
-
- 0
|
143
|
-
- 6
|
144
|
-
- 0
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
145
77
|
version: 0.6.0
|
146
|
-
prerelease: false
|
147
78
|
type: :development
|
148
|
-
requirement: *id008
|
149
|
-
- !ruby/object:Gem::Dependency
|
150
|
-
name: cucumber
|
151
|
-
version_requirements: &id009 !ruby/object:Gem::Requirement
|
152
|
-
none: false
|
153
|
-
requirements:
|
154
|
-
- - ">="
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
hash: 63
|
157
|
-
segments:
|
158
|
-
- 0
|
159
|
-
- 8
|
160
|
-
- 0
|
161
|
-
version: 0.8.0
|
162
79
|
prerelease: false
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
version_requirements: &id010 !ruby/object:Gem::Requirement
|
80
|
+
version_requirements: *78059060
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: watchr
|
83
|
+
requirement: &77992410 !ruby/object:Gem::Requirement
|
168
84
|
none: false
|
169
|
-
requirements:
|
170
|
-
- -
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
|
173
|
-
segments:
|
174
|
-
- 0
|
175
|
-
- 3
|
176
|
-
- 0
|
177
|
-
version: 0.3.0
|
178
|
-
prerelease: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.5.5
|
179
89
|
type: :development
|
180
|
-
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *77992410
|
181
92
|
description: Simple language recognition tool for Ruby based on packrat parsing
|
182
93
|
email: jarhart@gmail.com
|
183
|
-
executables:
|
184
|
-
- rtlr.bat
|
94
|
+
executables:
|
185
95
|
- rtlr
|
186
96
|
extensions: []
|
187
|
-
|
188
|
-
extra_rdoc_files:
|
97
|
+
extra_rdoc_files:
|
189
98
|
- LICENSE.txt
|
190
99
|
- README.rdoc
|
191
|
-
files:
|
100
|
+
files:
|
192
101
|
- bin/rtlr
|
193
|
-
- bin/rtlr.bat
|
194
102
|
- lib/rattler.rb
|
195
103
|
- lib/rattler/back_end.rb
|
196
104
|
- lib/rattler/back_end/compiler.rb
|
@@ -204,12 +112,12 @@ files:
|
|
204
112
|
- lib/rattler/back_end/parser_generator/expr_generator.rb
|
205
113
|
- lib/rattler/back_end/parser_generator/fail_generator.rb
|
206
114
|
- lib/rattler/back_end/parser_generator/gen_method_names.rb
|
207
|
-
- lib/rattler/back_end/parser_generator/generator_helper.rb
|
208
|
-
- lib/rattler/back_end/parser_generator/generators.rb
|
209
115
|
- lib/rattler/back_end/parser_generator/label_generator.rb
|
116
|
+
- lib/rattler/back_end/parser_generator/list1_generator.rb
|
117
|
+
- lib/rattler/back_end/parser_generator/list_generating.rb
|
118
|
+
- lib/rattler/back_end/parser_generator/list_generator.rb
|
210
119
|
- lib/rattler/back_end/parser_generator/match_generator.rb
|
211
120
|
- lib/rattler/back_end/parser_generator/nested.rb
|
212
|
-
- lib/rattler/back_end/parser_generator/nested_generators.rb
|
213
121
|
- lib/rattler/back_end/parser_generator/one_or_more_generator.rb
|
214
122
|
- lib/rattler/back_end/parser_generator/optional_generator.rb
|
215
123
|
- lib/rattler/back_end/parser_generator/predicate_propogating.rb
|
@@ -218,10 +126,10 @@ files:
|
|
218
126
|
- lib/rattler/back_end/parser_generator/sequence_generator.rb
|
219
127
|
- lib/rattler/back_end/parser_generator/skip_generator.rb
|
220
128
|
- lib/rattler/back_end/parser_generator/skip_propogating.rb
|
129
|
+
- lib/rattler/back_end/parser_generator/sub_generating.rb
|
221
130
|
- lib/rattler/back_end/parser_generator/token_generator.rb
|
222
131
|
- lib/rattler/back_end/parser_generator/token_propogating.rb
|
223
132
|
- lib/rattler/back_end/parser_generator/top_level.rb
|
224
|
-
- lib/rattler/back_end/parser_generator/top_level_generators.rb
|
225
133
|
- lib/rattler/back_end/parser_generator/zero_or_more_generator.rb
|
226
134
|
- lib/rattler/back_end/ruby_generator.rb
|
227
135
|
- lib/rattler/grammar.rb
|
@@ -242,6 +150,8 @@ files:
|
|
242
150
|
- lib/rattler/parsers/eof.rb
|
243
151
|
- lib/rattler/parsers/fail.rb
|
244
152
|
- lib/rattler/parsers/label.rb
|
153
|
+
- lib/rattler/parsers/list.rb
|
154
|
+
- lib/rattler/parsers/list1.rb
|
245
155
|
- lib/rattler/parsers/match.rb
|
246
156
|
- lib/rattler/parsers/match_joining.rb
|
247
157
|
- lib/rattler/parsers/one_or_more.rb
|
@@ -276,9 +186,11 @@ files:
|
|
276
186
|
- features/command_line/parser_generator.feature
|
277
187
|
- features/grammar/any_character.feature
|
278
188
|
- features/grammar/character_class.feature
|
189
|
+
- features/grammar/comments.feature
|
279
190
|
- features/grammar/eof.feature
|
280
191
|
- features/grammar/fail.feature
|
281
192
|
- features/grammar/labels.feature
|
193
|
+
- features/grammar/list_matching.feature
|
282
194
|
- features/grammar/literal.feature
|
283
195
|
- features/grammar/negative_lookahead.feature
|
284
196
|
- features/grammar/node_action.feature
|
@@ -309,6 +221,8 @@ files:
|
|
309
221
|
- spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb
|
310
222
|
- spec/rattler/back_end/parser_generator/fail_generator_spec.rb
|
311
223
|
- spec/rattler/back_end/parser_generator/label_generator_spec.rb
|
224
|
+
- spec/rattler/back_end/parser_generator/list1_generator_spec.rb
|
225
|
+
- spec/rattler/back_end/parser_generator/list_generator_spec.rb
|
312
226
|
- spec/rattler/back_end/parser_generator/match_generator_spec.rb
|
313
227
|
- spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rb
|
314
228
|
- spec/rattler/back_end/parser_generator/optional_generator_spec.rb
|
@@ -328,7 +242,10 @@ files:
|
|
328
242
|
- spec/rattler/parsers/disallow_spec.rb
|
329
243
|
- spec/rattler/parsers/dispatch_action_spec.rb
|
330
244
|
- spec/rattler/parsers/eof_spec.rb
|
245
|
+
- spec/rattler/parsers/fail_spec.rb
|
331
246
|
- spec/rattler/parsers/label_spec.rb
|
247
|
+
- spec/rattler/parsers/list1_spec.rb
|
248
|
+
- spec/rattler/parsers/list_spec.rb
|
332
249
|
- spec/rattler/parsers/match_spec.rb
|
333
250
|
- spec/rattler/parsers/one_or_more_spec.rb
|
334
251
|
- spec/rattler/parsers/optional_spec.rb
|
@@ -354,47 +271,44 @@ files:
|
|
354
271
|
- spec/support/runtime_parser_spec_helper.rb
|
355
272
|
has_rdoc: true
|
356
273
|
homepage: http://github.com/jarhart/rattler
|
357
|
-
licenses:
|
274
|
+
licenses:
|
358
275
|
- MIT
|
359
276
|
post_install_message:
|
360
277
|
rdoc_options: []
|
361
|
-
|
362
|
-
require_paths:
|
278
|
+
require_paths:
|
363
279
|
- lib
|
364
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
280
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
365
281
|
none: false
|
366
|
-
requirements:
|
367
|
-
- -
|
368
|
-
- !ruby/object:Gem::Version
|
369
|
-
|
370
|
-
segments:
|
282
|
+
requirements:
|
283
|
+
- - ! '>='
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '0'
|
286
|
+
segments:
|
371
287
|
- 0
|
372
|
-
|
373
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
288
|
+
hash: -628641389
|
289
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
374
290
|
none: false
|
375
|
-
requirements:
|
376
|
-
- -
|
377
|
-
- !ruby/object:Gem::Version
|
378
|
-
|
379
|
-
segments:
|
380
|
-
- 0
|
381
|
-
version: "0"
|
291
|
+
requirements:
|
292
|
+
- - ! '>='
|
293
|
+
- !ruby/object:Gem::Version
|
294
|
+
version: '0'
|
382
295
|
requirements: []
|
383
|
-
|
384
296
|
rubyforge_project:
|
385
297
|
rubygems_version: 1.5.2
|
386
298
|
signing_key:
|
387
299
|
specification_version: 3
|
388
300
|
summary: Ruby Tool for Language Recognition
|
389
|
-
test_files:
|
301
|
+
test_files:
|
390
302
|
- features/command_line/dest_option.feature
|
391
303
|
- features/command_line/output_option.feature
|
392
304
|
- features/command_line/parser_generator.feature
|
393
305
|
- features/grammar/any_character.feature
|
394
306
|
- features/grammar/character_class.feature
|
307
|
+
- features/grammar/comments.feature
|
395
308
|
- features/grammar/eof.feature
|
396
309
|
- features/grammar/fail.feature
|
397
310
|
- features/grammar/labels.feature
|
311
|
+
- features/grammar/list_matching.feature
|
398
312
|
- features/grammar/literal.feature
|
399
313
|
- features/grammar/negative_lookahead.feature
|
400
314
|
- features/grammar/node_action.feature
|
@@ -425,6 +339,8 @@ test_files:
|
|
425
339
|
- spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb
|
426
340
|
- spec/rattler/back_end/parser_generator/fail_generator_spec.rb
|
427
341
|
- spec/rattler/back_end/parser_generator/label_generator_spec.rb
|
342
|
+
- spec/rattler/back_end/parser_generator/list1_generator_spec.rb
|
343
|
+
- spec/rattler/back_end/parser_generator/list_generator_spec.rb
|
428
344
|
- spec/rattler/back_end/parser_generator/match_generator_spec.rb
|
429
345
|
- spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rb
|
430
346
|
- spec/rattler/back_end/parser_generator/optional_generator_spec.rb
|
@@ -444,7 +360,10 @@ test_files:
|
|
444
360
|
- spec/rattler/parsers/disallow_spec.rb
|
445
361
|
- spec/rattler/parsers/dispatch_action_spec.rb
|
446
362
|
- spec/rattler/parsers/eof_spec.rb
|
363
|
+
- spec/rattler/parsers/fail_spec.rb
|
447
364
|
- spec/rattler/parsers/label_spec.rb
|
365
|
+
- spec/rattler/parsers/list1_spec.rb
|
366
|
+
- spec/rattler/parsers/list_spec.rb
|
448
367
|
- spec/rattler/parsers/match_spec.rb
|
449
368
|
- spec/rattler/parsers/one_or_more_spec.rb
|
450
369
|
- spec/rattler/parsers/optional_spec.rb
|
data/bin/rtlr.bat
DELETED
@@ -1,130 +0,0 @@
|
|
1
|
-
require 'rattler/back_end/parser_generator'
|
2
|
-
|
3
|
-
module Rattler::BackEnd::ParserGenerator
|
4
|
-
# @private
|
5
|
-
module GeneratorHelper #:nodoc:
|
6
|
-
|
7
|
-
def gen_basic_nested(parser)
|
8
|
-
gen_basic parser
|
9
|
-
end
|
10
|
-
|
11
|
-
def gen_basic_top_level(parser)
|
12
|
-
gen_basic parser
|
13
|
-
end
|
14
|
-
|
15
|
-
def gen_assert_nested(parser)
|
16
|
-
gen_assert parser
|
17
|
-
end
|
18
|
-
|
19
|
-
def gen_assert_top_level(parser)
|
20
|
-
gen_assert parser
|
21
|
-
end
|
22
|
-
|
23
|
-
def gen_disallow_nested(parser)
|
24
|
-
gen_disallow parser
|
25
|
-
end
|
26
|
-
|
27
|
-
def gen_disallow_top_level(parser)
|
28
|
-
gen_disallow parser
|
29
|
-
end
|
30
|
-
|
31
|
-
def gen_dispatch_action_nested(parser, target, method_name)
|
32
|
-
gen_dispatch_action parser, target, method_name
|
33
|
-
end
|
34
|
-
|
35
|
-
def gen_dispatch_action_top_level(parser, target, method_name)
|
36
|
-
gen_dispatch_action parser, target, method_name
|
37
|
-
end
|
38
|
-
|
39
|
-
def gen_direct_action_nested(parser, action)
|
40
|
-
gen_direct_action parser, action
|
41
|
-
end
|
42
|
-
|
43
|
-
def gen_direct_action_top_level(parser, action)
|
44
|
-
gen_direct_action parser, action
|
45
|
-
end
|
46
|
-
|
47
|
-
def gen_token_nested(parser)
|
48
|
-
atomic_block { gen_token_top_level parser }
|
49
|
-
end
|
50
|
-
|
51
|
-
def gen_token_top_level(parser)
|
52
|
-
(@g << "tp = @scanner.pos").newline
|
53
|
-
gen_intermediate_skip parser
|
54
|
-
(@g << ' &&').newline
|
55
|
-
@g << "@scanner.string[tp...(@scanner.pos)]"
|
56
|
-
end
|
57
|
-
|
58
|
-
def gen_skip_nested(parser)
|
59
|
-
gen_skip parser
|
60
|
-
end
|
61
|
-
|
62
|
-
def gen_skip_top_level(parser)
|
63
|
-
gen_skip parser
|
64
|
-
end
|
65
|
-
|
66
|
-
def gen_intermediate(parser)
|
67
|
-
gen_basic_nested parser
|
68
|
-
end
|
69
|
-
|
70
|
-
def gen_intermediate_assert(parser)
|
71
|
-
gen_assert_nested parser
|
72
|
-
end
|
73
|
-
|
74
|
-
def gen_intermediate_disallow(parser)
|
75
|
-
gen_disallow_nested parser
|
76
|
-
end
|
77
|
-
|
78
|
-
def gen_intermediate_skip(parser)
|
79
|
-
gen_skip_nested parser
|
80
|
-
end
|
81
|
-
|
82
|
-
protected
|
83
|
-
|
84
|
-
def atomic_expr
|
85
|
-
@g.surround('(', ')') { yield }
|
86
|
-
end
|
87
|
-
|
88
|
-
def atomic_block
|
89
|
-
@g.block('begin') { yield }
|
90
|
-
end
|
91
|
-
|
92
|
-
def result_name
|
93
|
-
'r'
|
94
|
-
end
|
95
|
-
|
96
|
-
def saved_pos_name
|
97
|
-
"p#{sequence_level}"
|
98
|
-
end
|
99
|
-
|
100
|
-
def dispatch_action_result(target, method_name, options = {})
|
101
|
-
args = [options[:array_expr] || "[#{result_name}]"]
|
102
|
-
labeled = options[:labeled]
|
103
|
-
if labeled and not labeled.empty?
|
104
|
-
if labeled.respond_to?(:to_hash)
|
105
|
-
labeled = '{' + labeled.map {|k, v| ":#{k} => #{v}"}.join(', ') + '}'
|
106
|
-
end
|
107
|
-
args << ":labeled => #{labeled}"
|
108
|
-
end
|
109
|
-
t = target == 'self' ? '' : "#{target}."
|
110
|
-
"#{t}#{method_name}(#{args.join ', '})"
|
111
|
-
end
|
112
|
-
|
113
|
-
def direct_action_result(action, options = {})
|
114
|
-
args = options[:bind_args] || [result_name]
|
115
|
-
labeled = options[:labeled] || {}
|
116
|
-
"(#{action.bind args, labeled})"
|
117
|
-
end
|
118
|
-
|
119
|
-
def lookahead
|
120
|
-
(@g << "#{saved_pos_name} = @scanner.pos").newline
|
121
|
-
yield
|
122
|
-
(@g << "@scanner.pos = #{saved_pos_name}").newline
|
123
|
-
end
|
124
|
-
|
125
|
-
def new_level(old_level)
|
126
|
-
old_level ? (old_level + 1) : 0
|
127
|
-
end
|
128
|
-
|
129
|
-
end
|
130
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'rattler/back_end/parser_generator'
|
2
|
-
|
3
|
-
module Rattler::BackEnd::ParserGenerator
|
4
|
-
|
5
|
-
# @private
|
6
|
-
module Generators #:nodoc:
|
7
|
-
|
8
|
-
protected
|
9
|
-
|
10
|
-
def match_generator
|
11
|
-
@match_generator ||= MatchGenerator.send(factory_method, @g,
|
12
|
-
choice_level, sequence_level, repeat_level)
|
13
|
-
end
|
14
|
-
|
15
|
-
def choice_generator
|
16
|
-
ChoiceGenerator.send(factory_method, @g,
|
17
|
-
new_level(choice_level), sequence_level, repeat_level)
|
18
|
-
end
|
19
|
-
|
20
|
-
def sequence_generator
|
21
|
-
SequenceGenerator.send(factory_method, @g,
|
22
|
-
choice_level, new_level(sequence_level), repeat_level)
|
23
|
-
end
|
24
|
-
|
25
|
-
def optional_generator
|
26
|
-
@optional_generator ||= OptionalGenerator.send(factory_method, @g,
|
27
|
-
choice_level, sequence_level, repeat_level)
|
28
|
-
end
|
29
|
-
|
30
|
-
def zero_or_more_generator
|
31
|
-
ZeroOrMoreGenerator.send(factory_method, @g,
|
32
|
-
choice_level, sequence_level, new_level(repeat_level))
|
33
|
-
end
|
34
|
-
|
35
|
-
def one_or_more_generator
|
36
|
-
OneOrMoreGenerator.send(factory_method, @g,
|
37
|
-
choice_level, sequence_level, new_level(repeat_level))
|
38
|
-
end
|
39
|
-
|
40
|
-
def apply_generator
|
41
|
-
@apply_generator ||= ApplyGenerator.send(factory_method, @g,
|
42
|
-
choice_level, sequence_level, repeat_level)
|
43
|
-
end
|
44
|
-
|
45
|
-
def assert_generator
|
46
|
-
@assert_generator ||= AssertGenerator.send(factory_method, @g,
|
47
|
-
choice_level, sequence_level, repeat_level)
|
48
|
-
end
|
49
|
-
|
50
|
-
def disallow_generator
|
51
|
-
@disallow_generator ||= DisallowGenerator.send(factory_method, @g,
|
52
|
-
choice_level, sequence_level, repeat_level)
|
53
|
-
end
|
54
|
-
|
55
|
-
def dispatch_action_generator
|
56
|
-
@dispatch_action_generator ||= DispatchActionGenerator.send(factory_method, @g,
|
57
|
-
choice_level, sequence_level, repeat_level)
|
58
|
-
end
|
59
|
-
|
60
|
-
def direct_action_generator
|
61
|
-
@direct_action_generator ||= DirectActionGenerator.send(factory_method, @g,
|
62
|
-
choice_level, sequence_level, repeat_level)
|
63
|
-
end
|
64
|
-
|
65
|
-
def token_generator
|
66
|
-
@token_generator ||= TokenGenerator.send(factory_method, @g,
|
67
|
-
choice_level, sequence_level, repeat_level)
|
68
|
-
end
|
69
|
-
|
70
|
-
def skip_generator
|
71
|
-
@skip_generator ||= SkipGenerator.send(factory_method, @g,
|
72
|
-
choice_level, sequence_level, repeat_level)
|
73
|
-
end
|
74
|
-
|
75
|
-
def label_generator
|
76
|
-
@label_generator ||= LabelGenerator.send(factory_method, @g,
|
77
|
-
choice_level, sequence_level, repeat_level)
|
78
|
-
end
|
79
|
-
|
80
|
-
def fail_generator
|
81
|
-
@fail_generator ||= FailGenerator.send(factory_method, @g)
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|