rattler 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. data/README.rdoc +2 -2
  2. data/bin/rtlr.compiled.rbc +201 -0
  3. data/features/command_line/dest_option.feature +1 -0
  4. data/features/command_line/lib_option.feature +2 -0
  5. data/features/command_line/output_option.feature +2 -0
  6. data/features/command_line/parser_generator.feature +3 -0
  7. data/features/step_definitions/cli_steps.rbc +149 -0
  8. data/features/step_definitions/grammar_steps.rbc +1211 -0
  9. data/features/support/env.rb +4 -0
  10. data/features/support/env.rbc +389 -0
  11. data/lib/rattler.rbc +1231 -0
  12. data/lib/rattler/back_end.rbc +286 -0
  13. data/lib/rattler/back_end/compiler.rbc +1394 -0
  14. data/lib/rattler/back_end/optimizer.rbc +2000 -0
  15. data/lib/rattler/back_end/optimizer/composite_reducing.rbc +337 -0
  16. data/lib/rattler/back_end/optimizer/flatten_choice.rbc +443 -0
  17. data/lib/rattler/back_end/optimizer/flatten_sequence.rbc +827 -0
  18. data/lib/rattler/back_end/optimizer/flattening.rbc +570 -0
  19. data/lib/rattler/back_end/optimizer/inline_regular_rules.rbc +691 -0
  20. data/lib/rattler/back_end/optimizer/join_match_capturing_sequence.rbc +1299 -0
  21. data/lib/rattler/back_end/optimizer/join_match_choice.rbc +523 -0
  22. data/lib/rattler/back_end/optimizer/join_match_matching_sequence.rbc +619 -0
  23. data/lib/rattler/back_end/optimizer/join_match_sequence.rbc +174 -0
  24. data/lib/rattler/back_end/optimizer/join_predicate_bare_match.rbc +1505 -0
  25. data/lib/rattler/back_end/optimizer/join_predicate_match.rbc +174 -0
  26. data/lib/rattler/back_end/optimizer/join_predicate_nested_match.rbc +620 -0
  27. data/lib/rattler/back_end/optimizer/join_predicate_or_bare_match.rbc +1502 -0
  28. data/lib/rattler/back_end/optimizer/join_predicate_or_match.rbc +174 -0
  29. data/lib/rattler/back_end/optimizer/join_predicate_or_nested_match.rbc +616 -0
  30. data/lib/rattler/back_end/optimizer/match_joining.rbc +1454 -0
  31. data/lib/rattler/back_end/optimizer/optimization.rbc +1366 -0
  32. data/lib/rattler/back_end/optimizer/optimization_context.rbc +1386 -0
  33. data/lib/rattler/back_end/optimizer/optimization_sequence.rbc +520 -0
  34. data/lib/rattler/back_end/optimizer/optimize_children.rbc +793 -0
  35. data/lib/rattler/back_end/optimizer/reduce_repeat_match.rbc +788 -0
  36. data/lib/rattler/back_end/optimizer/remove_meaningless_wrapper.rbc +508 -0
  37. data/lib/rattler/back_end/optimizer/simplify_redundant_repeat.rbc +807 -0
  38. data/lib/rattler/back_end/optimizer/simplify_token_match.rbc +561 -0
  39. data/lib/rattler/back_end/parser_generator.rbc +1326 -0
  40. data/lib/rattler/back_end/parser_generator/apply_generator.rb +30 -37
  41. data/lib/rattler/back_end/parser_generator/apply_generator.rbc +2148 -0
  42. data/lib/rattler/back_end/parser_generator/assert_generator.rb +8 -24
  43. data/lib/rattler/back_end/parser_generator/assert_generator.rbc +1967 -0
  44. data/lib/rattler/back_end/parser_generator/back_reference_generator.rb +15 -39
  45. data/lib/rattler/back_end/parser_generator/back_reference_generator.rbc +1665 -0
  46. data/lib/rattler/back_end/parser_generator/choice_generator.rb +28 -40
  47. data/lib/rattler/back_end/parser_generator/choice_generator.rbc +2793 -0
  48. data/lib/rattler/back_end/parser_generator/direct_action_generator.rb +6 -20
  49. data/lib/rattler/back_end/parser_generator/direct_action_generator.rbc +1071 -0
  50. data/lib/rattler/back_end/parser_generator/disallow_generator.rb +8 -24
  51. data/lib/rattler/back_end/parser_generator/disallow_generator.rbc +1967 -0
  52. data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rb +6 -20
  53. data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rbc +1071 -0
  54. data/lib/rattler/back_end/parser_generator/expr_generator.rb +33 -65
  55. data/lib/rattler/back_end/parser_generator/expr_generator.rbc +2295 -0
  56. data/lib/rattler/back_end/parser_generator/fail_generator.rb +10 -30
  57. data/lib/rattler/back_end/parser_generator/fail_generator.rbc +1216 -0
  58. data/lib/rattler/back_end/parser_generator/gen_method_names.rbc +296 -0
  59. data/lib/rattler/back_end/parser_generator/group_match.rbc +612 -0
  60. data/lib/rattler/back_end/parser_generator/group_match_generator.rb +11 -18
  61. data/lib/rattler/back_end/parser_generator/group_match_generator.rbc +1647 -0
  62. data/lib/rattler/back_end/parser_generator/label_generator.rb +7 -10
  63. data/lib/rattler/back_end/parser_generator/label_generator.rbc +1401 -0
  64. data/lib/rattler/back_end/parser_generator/list1_generator.rb +8 -15
  65. data/lib/rattler/back_end/parser_generator/list1_generator.rbc +1237 -0
  66. data/lib/rattler/back_end/parser_generator/list_generating.rb +28 -27
  67. data/lib/rattler/back_end/parser_generator/list_generating.rbc +1900 -0
  68. data/lib/rattler/back_end/parser_generator/list_generator.rb +5 -11
  69. data/lib/rattler/back_end/parser_generator/list_generator.rbc +1068 -0
  70. data/lib/rattler/back_end/parser_generator/match_generator.rb +15 -39
  71. data/lib/rattler/back_end/parser_generator/match_generator.rbc +1743 -0
  72. data/lib/rattler/back_end/parser_generator/nested.rb +11 -5
  73. data/lib/rattler/back_end/parser_generator/nested.rbc +496 -0
  74. data/lib/rattler/back_end/parser_generator/one_or_more_generator.rb +10 -8
  75. data/lib/rattler/back_end/parser_generator/one_or_more_generator.rbc +1277 -0
  76. data/lib/rattler/back_end/parser_generator/optional_generator.rb +29 -49
  77. data/lib/rattler/back_end/parser_generator/optional_generator.rbc +2025 -0
  78. data/lib/rattler/back_end/parser_generator/predicate_propogating.rbc +648 -0
  79. data/lib/rattler/back_end/parser_generator/repeat_generating.rb +26 -36
  80. data/lib/rattler/back_end/parser_generator/repeat_generating.rbc +1549 -0
  81. data/lib/rattler/back_end/parser_generator/rule_generator.rbc +1239 -0
  82. data/lib/rattler/back_end/parser_generator/rule_set_generator.rbc +2641 -0
  83. data/lib/rattler/back_end/parser_generator/sequence_generator.rb +37 -61
  84. data/lib/rattler/back_end/parser_generator/sequence_generator.rbc +4867 -0
  85. data/lib/rattler/back_end/parser_generator/skip_generator.rb +10 -14
  86. data/lib/rattler/back_end/parser_generator/skip_generator.rbc +1278 -0
  87. data/lib/rattler/back_end/parser_generator/skip_propogating.rbc +432 -0
  88. data/lib/rattler/back_end/parser_generator/sub_generating.rb +52 -33
  89. data/lib/rattler/back_end/parser_generator/sub_generating.rbc +2785 -0
  90. data/lib/rattler/back_end/parser_generator/token_generator.rb +0 -19
  91. data/lib/rattler/back_end/parser_generator/token_generator.rbc +755 -0
  92. data/lib/rattler/back_end/parser_generator/token_propogating.rbc +324 -0
  93. data/lib/rattler/back_end/parser_generator/top_level.rb +8 -6
  94. data/lib/rattler/back_end/parser_generator/top_level.rbc +352 -0
  95. data/lib/rattler/back_end/parser_generator/zero_or_more_generator.rb +7 -5
  96. data/lib/rattler/back_end/parser_generator/zero_or_more_generator.rbc +1111 -0
  97. data/lib/rattler/back_end/ruby_generator.rbc +1841 -0
  98. data/lib/rattler/grammar.rbc +557 -0
  99. data/lib/rattler/grammar/analysis.rbc +1944 -0
  100. data/lib/rattler/grammar/grammar.rbc +1090 -0
  101. data/lib/rattler/grammar/grammar_dsl.rbc +1401 -0
  102. data/lib/rattler/grammar/grammar_parser.rbc +2096 -0
  103. data/lib/rattler/grammar/metagrammar.rb +1 -1
  104. data/lib/rattler/grammar/metagrammar.rbc +11014 -0
  105. data/lib/rattler/grammar/rattler.rtlr +1 -1
  106. data/lib/rattler/parsers.rb +1 -1
  107. data/lib/rattler/parsers.rbc +1006 -0
  108. data/lib/rattler/parsers/action_code.rb +20 -26
  109. data/lib/rattler/parsers/action_code.rbc +1577 -0
  110. data/lib/rattler/parsers/apply.rbc +562 -0
  111. data/lib/rattler/parsers/assert.rbc +378 -0
  112. data/lib/rattler/parsers/back_reference.rbc +871 -0
  113. data/lib/rattler/parsers/choice.rbc +607 -0
  114. data/lib/rattler/parsers/combinator_parser.rbc +612 -0
  115. data/lib/rattler/parsers/combining.rbc +570 -0
  116. data/lib/rattler/parsers/direct_action.rbc +1472 -0
  117. data/lib/rattler/parsers/disallow.rbc +379 -0
  118. data/lib/rattler/parsers/dispatch_action.rbc +2078 -0
  119. data/lib/rattler/parsers/eof.rbc +567 -0
  120. data/lib/rattler/parsers/fail.rbc +745 -0
  121. data/lib/rattler/parsers/label.rbc +749 -0
  122. data/lib/rattler/parsers/list.rbc +292 -0
  123. data/lib/rattler/parsers/{list.rb → list0.rb} +3 -3
  124. data/lib/rattler/parsers/list0.rbc +292 -0
  125. data/lib/rattler/parsers/list1.rbc +305 -0
  126. data/lib/rattler/parsers/list_parser.rbc +886 -0
  127. data/lib/rattler/parsers/match.rbc +621 -0
  128. data/lib/rattler/parsers/node_code.rbc +1064 -0
  129. data/lib/rattler/parsers/one_or_more.rbc +475 -0
  130. data/lib/rattler/parsers/optional.rbc +450 -0
  131. data/lib/rattler/parsers/parser.rbc +994 -0
  132. data/lib/rattler/parsers/parser_dsl.rb +6 -4
  133. data/lib/rattler/parsers/parser_dsl.rbc +4765 -0
  134. data/lib/rattler/parsers/predicate.rbc +490 -0
  135. data/lib/rattler/parsers/rule.rbc +777 -0
  136. data/lib/rattler/parsers/rule_set.rbc +1438 -0
  137. data/lib/rattler/parsers/sequence.rbc +1040 -0
  138. data/lib/rattler/parsers/skip.rbc +613 -0
  139. data/lib/rattler/parsers/token.rbc +457 -0
  140. data/lib/rattler/parsers/zero_or_more.rbc +462 -0
  141. data/lib/rattler/runner.rbc +3813 -0
  142. data/lib/rattler/runtime.rbc +370 -0
  143. data/lib/rattler/runtime/extended_packrat_parser.rbc +2351 -0
  144. data/lib/rattler/runtime/packrat_parser.rbc +1390 -0
  145. data/lib/rattler/runtime/parse_failure.rbc +909 -0
  146. data/lib/rattler/runtime/parse_node.rbc +1007 -0
  147. data/lib/rattler/runtime/parser.rbc +2267 -0
  148. data/lib/rattler/runtime/parser_helper.rbc +337 -0
  149. data/lib/rattler/runtime/recursive_descent_parser.rbc +942 -0
  150. data/lib/rattler/util.rbc +286 -0
  151. data/lib/rattler/util/graphviz.rbc +327 -0
  152. data/lib/rattler/util/graphviz/node_builder.rbc +2207 -0
  153. data/lib/rattler/util/line_counter.rbc +988 -0
  154. data/lib/rattler/util/node.rbc +2393 -0
  155. data/lib/rattler/util/parser_spec_helper.rbc +2533 -0
  156. data/spec/rattler/back_end/compiler_spec.rbc +1187 -0
  157. data/spec/rattler/back_end/optimizer/flatten_choice_spec.rbc +2093 -0
  158. data/spec/rattler/back_end/optimizer/flatten_sequence_spec.rbc +4055 -0
  159. data/spec/rattler/back_end/optimizer/inline_regular_rules_spec.rbc +2345 -0
  160. data/spec/rattler/back_end/optimizer/join_match_capturing_sequence_spec.rbc +7006 -0
  161. data/spec/rattler/back_end/optimizer/join_match_choice_spec.rbc +3252 -0
  162. data/spec/rattler/back_end/optimizer/join_match_matching_sequence_spec.rbc +3681 -0
  163. data/spec/rattler/back_end/optimizer/join_predicate_bare_match_spec.rbc +5603 -0
  164. data/spec/rattler/back_end/optimizer/join_predicate_nested_match_spec.rbc +5232 -0
  165. data/spec/rattler/back_end/optimizer/join_predicate_or_bare_match_spec.rbc +4272 -0
  166. data/spec/rattler/back_end/optimizer/join_predicate_or_nested_match_spec.rbc +4342 -0
  167. data/spec/rattler/back_end/optimizer/reduce_repeat_match_spec.rbc +2960 -0
  168. data/spec/rattler/back_end/optimizer/simplify_redundant_repeat_spec.rbc +6929 -0
  169. data/spec/rattler/back_end/optimizer/simplify_token_match_spec.rbc +2327 -0
  170. data/spec/rattler/back_end/optimizer_spec.rbc +372 -0
  171. data/spec/rattler/back_end/parser_generator/apply_generator_spec.rbc +4710 -0
  172. data/spec/rattler/back_end/parser_generator/assert_generator_spec.rbc +4697 -0
  173. data/spec/rattler/back_end/parser_generator/back_reference_generator_spec.rbc +4855 -0
  174. data/spec/rattler/back_end/parser_generator/choice_generator_spec.rbc +5350 -0
  175. data/spec/rattler/back_end/parser_generator/direct_action_generator_spec.rbc +4737 -0
  176. data/spec/rattler/back_end/parser_generator/disallow_generator_spec.rbc +4697 -0
  177. data/spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rbc +4731 -0
  178. data/spec/rattler/back_end/parser_generator/fail_generator_spec.rbc +2115 -0
  179. data/spec/rattler/back_end/parser_generator/group_match_generator_spec.rbc +4195 -0
  180. data/spec/rattler/back_end/parser_generator/group_match_spec.rbc +1414 -0
  181. data/spec/rattler/back_end/parser_generator/label_generator_spec.rbc +4696 -0
  182. data/spec/rattler/back_end/parser_generator/list1_generator_spec.rbc +5213 -0
  183. data/spec/rattler/back_end/parser_generator/list_generator_spec.rb +3 -3
  184. data/spec/rattler/back_end/parser_generator/list_generator_spec.rbc +5179 -0
  185. data/spec/rattler/back_end/parser_generator/match_generator_spec.rbc +4681 -0
  186. data/spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rbc +4957 -0
  187. data/spec/rattler/back_end/parser_generator/optional_generator_spec.rbc +4704 -0
  188. data/spec/rattler/back_end/parser_generator/rule_generator_spec.rbc +545 -0
  189. data/spec/rattler/back_end/parser_generator/rule_set_generator_spec.rbc +1110 -0
  190. data/spec/rattler/back_end/parser_generator/sequence_generator_spec.rbc +5453 -0
  191. data/spec/rattler/back_end/parser_generator/skip_generator_spec.rbc +4691 -0
  192. data/spec/rattler/back_end/parser_generator/token_generator_spec.rbc +4691 -0
  193. data/spec/rattler/back_end/parser_generator/zero_or_more_generator_spec.rbc +4924 -0
  194. data/spec/rattler/back_end/ruby_generator_spec.rbc +2460 -0
  195. data/spec/rattler/back_end/shared_compiler_examples.rbc +41886 -0
  196. data/spec/rattler/grammar/analysis_spec.rbc +4365 -0
  197. data/spec/rattler/grammar/grammar_parser_spec.rbc +10344 -0
  198. data/spec/rattler/grammar/grammar_spec.rbc +1701 -0
  199. data/spec/rattler/parsers/action_code_spec.rb +0 -29
  200. data/spec/rattler/parsers/action_code_spec.rbc +4674 -0
  201. data/spec/rattler/parsers/apply_spec.rbc +851 -0
  202. data/spec/rattler/parsers/assert_spec.rbc +752 -0
  203. data/spec/rattler/parsers/back_reference_spec.rbc +1002 -0
  204. data/spec/rattler/parsers/choice_spec.rbc +1696 -0
  205. data/spec/rattler/parsers/combinator_parser_spec.rbc +361 -0
  206. data/spec/rattler/parsers/direct_action_spec.rbc +5222 -0
  207. data/spec/rattler/parsers/disallow_spec.rbc +752 -0
  208. data/spec/rattler/parsers/dispatch_action_spec.rbc +3033 -0
  209. data/spec/rattler/parsers/eof_spec.rbc +728 -0
  210. data/spec/rattler/parsers/fail_spec.rbc +548 -0
  211. data/spec/rattler/parsers/label_spec.rbc +1091 -0
  212. data/spec/rattler/parsers/{list_spec.rb → list0_spec.rb} +5 -5
  213. data/spec/rattler/parsers/list0_spec.rbc +2308 -0
  214. data/spec/rattler/parsers/list1_spec.rbc +2287 -0
  215. data/spec/rattler/parsers/list_spec.rbc +2308 -0
  216. data/spec/rattler/parsers/match_spec.rbc +780 -0
  217. data/spec/rattler/parsers/node_code_spec.rbc +1754 -0
  218. data/spec/rattler/parsers/one_or_more_spec.rbc +1698 -0
  219. data/spec/rattler/parsers/optional_spec.rbc +1717 -0
  220. data/spec/rattler/parsers/parser_dsl_spec.rb +2 -2
  221. data/spec/rattler/parsers/parser_dsl_spec.rbc +10150 -0
  222. data/spec/rattler/parsers/rule_set_spec.rbc +1060 -0
  223. data/spec/rattler/parsers/sequence_spec.rbc +2899 -0
  224. data/spec/rattler/parsers/skip_spec.rbc +753 -0
  225. data/spec/rattler/parsers/token_spec.rbc +1511 -0
  226. data/spec/rattler/parsers/zero_or_more_spec.rbc +1719 -0
  227. data/spec/rattler/runtime/extended_packrat_parser_spec.rbc +1341 -0
  228. data/spec/rattler/runtime/packrat_parser_spec.rbc +210 -0
  229. data/spec/rattler/runtime/parse_failure_spec.rbc +2244 -0
  230. data/spec/rattler/runtime/parse_node_spec.rbc +2008 -0
  231. data/spec/rattler/runtime/parser_spec.rbc +2757 -0
  232. data/spec/rattler/runtime/recursive_descent_parser_spec.rbc +210 -0
  233. data/spec/rattler/runtime/shared_parser_examples.rbc +2567 -0
  234. data/spec/rattler/util/graphviz/node_builder_spec.rbc +3439 -0
  235. data/spec/rattler/util/line_counter_spec.rbc +2272 -0
  236. data/spec/rattler/util/node_spec.rbc +15023 -0
  237. data/spec/rattler_spec.rbc +1591 -0
  238. data/spec/spec_helper.rbc +336 -0
  239. data/spec/support/combinator_parser_spec_helper.rbc +1284 -0
  240. data/spec/support/compiler_spec_helper.rbc +1941 -0
  241. data/spec/support/parser_generator_spec_helper.rbc +718 -0
  242. data/spec/support/runtime_parser_spec_helper.rbc +313 -0
  243. metadata +421 -82
@@ -0,0 +1,432 @@
1
+ !RBIX
2
+ 3105615304195158506
3
+ x
4
+ M
5
+ 1
6
+ n
7
+ n
8
+ x
9
+ 10
10
+ __script__
11
+ i
12
+ 41
13
+ 5
14
+ 7
15
+ 0
16
+ 64
17
+ 47
18
+ 49
19
+ 1
20
+ 1
21
+ 15
22
+ 99
23
+ 7
24
+ 2
25
+ 45
26
+ 3
27
+ 4
28
+ 43
29
+ 5
30
+ 49
31
+ 6
32
+ 2
33
+ 13
34
+ 99
35
+ 12
36
+ 7
37
+ 7
38
+ 12
39
+ 7
40
+ 8
41
+ 12
42
+ 65
43
+ 12
44
+ 49
45
+ 9
46
+ 4
47
+ 15
48
+ 49
49
+ 7
50
+ 0
51
+ 15
52
+ 2
53
+ 11
54
+ I
55
+ 6
56
+ I
57
+ 0
58
+ I
59
+ 0
60
+ I
61
+ 0
62
+ n
63
+ p
64
+ 10
65
+ s
66
+ 33
67
+ rattler/back_end/parser_generator
68
+ x
69
+ 7
70
+ require
71
+ x
72
+ 15
73
+ ParserGenerator
74
+ x
75
+ 7
76
+ Rattler
77
+ n
78
+ x
79
+ 7
80
+ BackEnd
81
+ x
82
+ 17
83
+ open_module_under
84
+ x
85
+ 15
86
+ __module_init__
87
+ M
88
+ 1
89
+ n
90
+ n
91
+ x
92
+ 15
93
+ ParserGenerator
94
+ i
95
+ 28
96
+ 5
97
+ 66
98
+ 99
99
+ 7
100
+ 0
101
+ 65
102
+ 49
103
+ 1
104
+ 2
105
+ 13
106
+ 99
107
+ 12
108
+ 7
109
+ 2
110
+ 12
111
+ 7
112
+ 3
113
+ 12
114
+ 65
115
+ 12
116
+ 49
117
+ 4
118
+ 4
119
+ 15
120
+ 49
121
+ 2
122
+ 0
123
+ 11
124
+ I
125
+ 6
126
+ I
127
+ 0
128
+ I
129
+ 0
130
+ I
131
+ 0
132
+ n
133
+ p
134
+ 5
135
+ x
136
+ 15
137
+ SkipPropogating
138
+ x
139
+ 11
140
+ open_module
141
+ x
142
+ 15
143
+ __module_init__
144
+ M
145
+ 1
146
+ n
147
+ n
148
+ x
149
+ 15
150
+ SkipPropogating
151
+ i
152
+ 30
153
+ 5
154
+ 66
155
+ 99
156
+ 7
157
+ 0
158
+ 7
159
+ 1
160
+ 65
161
+ 67
162
+ 49
163
+ 2
164
+ 0
165
+ 49
166
+ 3
167
+ 4
168
+ 15
169
+ 99
170
+ 7
171
+ 4
172
+ 7
173
+ 5
174
+ 65
175
+ 67
176
+ 49
177
+ 2
178
+ 0
179
+ 49
180
+ 3
181
+ 4
182
+ 11
183
+ I
184
+ 5
185
+ I
186
+ 0
187
+ I
188
+ 0
189
+ I
190
+ 0
191
+ n
192
+ p
193
+ 6
194
+ x
195
+ 8
196
+ gen_skip
197
+ M
198
+ 1
199
+ n
200
+ n
201
+ x
202
+ 8
203
+ gen_skip
204
+ i
205
+ 29
206
+ 23
207
+ 1
208
+ 10
209
+ 14
210
+ 44
211
+ 43
212
+ 0
213
+ 78
214
+ 49
215
+ 1
216
+ 1
217
+ 19
218
+ 1
219
+ 15
220
+ 5
221
+ 20
222
+ 0
223
+ 49
224
+ 2
225
+ 0
226
+ 7
227
+ 3
228
+ 20
229
+ 1
230
+ 47
231
+ 49
232
+ 4
233
+ 3
234
+ 11
235
+ I
236
+ 6
237
+ I
238
+ 2
239
+ I
240
+ 1
241
+ I
242
+ 2
243
+ n
244
+ p
245
+ 5
246
+ x
247
+ 4
248
+ Hash
249
+ x
250
+ 16
251
+ new_from_literal
252
+ x
253
+ 5
254
+ child
255
+ x
256
+ 4
257
+ skip
258
+ x
259
+ 8
260
+ generate
261
+ p
262
+ 5
263
+ I
264
+ -1
265
+ I
266
+ 7
267
+ I
268
+ e
269
+ I
270
+ 8
271
+ I
272
+ 1d
273
+ x
274
+ 103
275
+ /home/jarhart/Dropbox/Workspaces/Ruby/rattler/lib/rattler/back_end/parser_generator/skip_propogating.rb
276
+ p
277
+ 2
278
+ x
279
+ 6
280
+ parser
281
+ x
282
+ 5
283
+ scope
284
+ x
285
+ 17
286
+ method_visibility
287
+ x
288
+ 15
289
+ add_defn_method
290
+ x
291
+ 21
292
+ gen_intermediate_skip
293
+ M
294
+ 1
295
+ n
296
+ n
297
+ x
298
+ 21
299
+ gen_intermediate_skip
300
+ i
301
+ 29
302
+ 23
303
+ 1
304
+ 10
305
+ 14
306
+ 44
307
+ 43
308
+ 0
309
+ 78
310
+ 49
311
+ 1
312
+ 1
313
+ 19
314
+ 1
315
+ 15
316
+ 5
317
+ 20
318
+ 0
319
+ 49
320
+ 2
321
+ 0
322
+ 7
323
+ 3
324
+ 20
325
+ 1
326
+ 47
327
+ 49
328
+ 4
329
+ 3
330
+ 11
331
+ I
332
+ 6
333
+ I
334
+ 2
335
+ I
336
+ 1
337
+ I
338
+ 2
339
+ n
340
+ p
341
+ 5
342
+ x
343
+ 4
344
+ Hash
345
+ x
346
+ 16
347
+ new_from_literal
348
+ x
349
+ 5
350
+ child
351
+ x
352
+ 17
353
+ intermediate_skip
354
+ x
355
+ 8
356
+ generate
357
+ p
358
+ 5
359
+ I
360
+ -1
361
+ I
362
+ b
363
+ I
364
+ e
365
+ I
366
+ c
367
+ I
368
+ 1d
369
+ x
370
+ 103
371
+ /home/jarhart/Dropbox/Workspaces/Ruby/rattler/lib/rattler/back_end/parser_generator/skip_propogating.rb
372
+ p
373
+ 2
374
+ x
375
+ 6
376
+ parser
377
+ x
378
+ 5
379
+ scope
380
+ p
381
+ 5
382
+ I
383
+ 2
384
+ I
385
+ 7
386
+ I
387
+ 10
388
+ I
389
+ b
390
+ I
391
+ 1e
392
+ x
393
+ 103
394
+ /home/jarhart/Dropbox/Workspaces/Ruby/rattler/lib/rattler/back_end/parser_generator/skip_propogating.rb
395
+ p
396
+ 0
397
+ x
398
+ 13
399
+ attach_method
400
+ p
401
+ 3
402
+ I
403
+ 2
404
+ I
405
+ 5
406
+ I
407
+ 1c
408
+ x
409
+ 103
410
+ /home/jarhart/Dropbox/Workspaces/Ruby/rattler/lib/rattler/back_end/parser_generator/skip_propogating.rb
411
+ p
412
+ 0
413
+ x
414
+ 13
415
+ attach_method
416
+ p
417
+ 5
418
+ I
419
+ 0
420
+ I
421
+ 1
422
+ I
423
+ 9
424
+ I
425
+ 3
426
+ I
427
+ 29
428
+ x
429
+ 103
430
+ /home/jarhart/Dropbox/Workspaces/Ruby/rattler/lib/rattler/back_end/parser_generator/skip_propogating.rb
431
+ p
432
+ 0
@@ -10,12 +10,16 @@ module Rattler::BackEnd::ParserGenerator
10
10
  protected
11
11
 
12
12
  def generate(parser, as=:basic, *args)
13
- case parser
14
- when Eof then gen_eof
15
- else generator(parser).send(:"gen_#{as}", parser, *args)
16
- end
13
+ gen_with generator(parser), parser, as, *args
14
+ end
15
+
16
+ def gen_nested(parser, as=:basic, *args)
17
+ gen_with generator(parser, :nested), parser, as, *args
17
18
  end
18
19
 
20
+ def gen_top_level(parser, as=:basic, *args)
21
+ gen_with generator(parser, :top_level), parser, as, *args
22
+ end
19
23
 
20
24
  def gen_eof
21
25
  @g << '@scanner.eos?'
@@ -23,77 +27,86 @@ module Rattler::BackEnd::ParserGenerator
23
27
 
24
28
  private
25
29
 
26
- def generator(parser)
30
+ def gen_with(g, parser, as=:basic, *args)
31
+ case parser
32
+ when Eof then gen_eof
33
+ else g.send(:"gen_#{as}", parser, *args)
34
+ end
35
+ end
36
+
37
+ def generator(parser, context=nil)
38
+ context ||= default_context
39
+
27
40
  case parser
28
41
 
29
42
  when Match
30
- cache_generator MatchGenerator
43
+ cache_generator MatchGenerator, context
31
44
 
32
45
  when Choice
33
- cache_generator ChoiceGenerator, :new_choice_level => true
46
+ cache_generator ChoiceGenerator, context, :new_choice_level => true
34
47
 
35
48
  when Sequence
36
- new_generator SequenceGenerator, :new_sequence_level => true
49
+ new_generator SequenceGenerator, context, :new_sequence_level => true
37
50
 
38
51
  when Optional
39
- cache_generator OptionalGenerator
52
+ cache_generator OptionalGenerator, context
40
53
 
41
54
  when ZeroOrMore
42
- cache_generator ZeroOrMoreGenerator, :new_repeat_level => true
55
+ cache_generator ZeroOrMoreGenerator, context, :new_repeat_level => true
43
56
 
44
57
  when OneOrMore
45
- cache_generator OneOrMoreGenerator, :new_repeat_level => true
58
+ cache_generator OneOrMoreGenerator, context, :new_repeat_level => true
46
59
 
47
- when List
48
- cache_generator ListGenerator, :new_repeat_level => true
60
+ when List0
61
+ cache_generator ListGenerator, context, :new_repeat_level => true
49
62
 
50
63
  when List1
51
- cache_generator List1Generator, :new_repeat_level => true
64
+ cache_generator List1Generator, context, :new_repeat_level => true
52
65
 
53
66
  when Apply
54
- cache_generator ApplyGenerator
67
+ cache_generator ApplyGenerator, context
55
68
 
56
69
  when Assert
57
- cache_generator AssertGenerator
70
+ cache_generator AssertGenerator, context
58
71
 
59
72
  when Disallow
60
- cache_generator DisallowGenerator
73
+ cache_generator DisallowGenerator, context
61
74
 
62
75
  when DispatchAction
63
- cache_generator DispatchActionGenerator
76
+ cache_generator DispatchActionGenerator, context
64
77
 
65
78
  when DirectAction
66
- cache_generator DirectActionGenerator
79
+ cache_generator DirectActionGenerator, context
67
80
 
68
81
  when Token
69
- cache_generator TokenGenerator
82
+ cache_generator TokenGenerator, context
70
83
 
71
84
  when Skip
72
- cache_generator SkipGenerator
85
+ cache_generator SkipGenerator, context
73
86
 
74
87
  when Label
75
- cache_generator LabelGenerator
88
+ cache_generator LabelGenerator, context
76
89
 
77
90
  when BackReference
78
- cache_generator BackReferenceGenerator
91
+ cache_generator BackReferenceGenerator, context
79
92
 
80
93
  when Fail
81
- cache_generator FailGenerator
94
+ cache_generator FailGenerator, context
82
95
 
83
96
  when GroupMatch
84
- cache_generator GroupMatchGenerator
97
+ cache_generator GroupMatchGenerator, context
85
98
 
86
99
  end
87
100
  end
88
101
 
89
- def cache_generator(factory, *args)
90
- generator_cache.fetch factory do
91
- generator_cache[factory] = new_generator factory, *args
102
+ def cache_generator(factory, context, *args)
103
+ generator_cache[context].fetch factory do
104
+ generator_cache[factory] = new_generator factory, context, *args
92
105
  end
93
106
  end
94
107
 
95
- def new_generator(factory, opts = {})
96
- factory.send factory_method, @g,
108
+ def new_generator(factory, context, opts = {})
109
+ factory.send context, @g,
97
110
  new_level(choice_level, opts[:new_choice_level]),
98
111
  new_level(sequence_level, opts[:new_sequence_level]),
99
112
  new_level(repeat_level, opts[:new_repeat_level])
@@ -108,7 +121,7 @@ module Rattler::BackEnd::ParserGenerator
108
121
  end
109
122
 
110
123
  def generator_cache
111
- @generator_cache ||= {}
124
+ @generator_cache ||= Hash.new {|h, k| h[k] = {} }
112
125
  end
113
126
 
114
127
  end
@@ -117,18 +130,24 @@ module Rattler::BackEnd::ParserGenerator
117
130
  include SubGenerating
118
131
 
119
132
  protected
120
- def factory_method
133
+
134
+ def default_context
121
135
  :nested
122
136
  end
137
+
138
+ alias_method :factory_method, :default_context
123
139
  end
124
140
 
125
141
  module TopLevelSubGenerating
126
142
  include SubGenerating
127
143
 
128
144
  protected
129
- def factory_method
145
+
146
+ def default_context
130
147
  :top_level
131
148
  end
149
+
150
+ alias_method :factory_method, :default_context
132
151
  end
133
152
 
134
153
  end