rattler 0.5.0 → 0.6.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.
Files changed (329) hide show
  1. data/README.rdoc +3 -175
  2. data/features/README.markdown +27 -0
  3. data/features/Tutorial.md +224 -0
  4. data/features/command_line/output_option.feature +2 -1
  5. data/features/command_line/{parser_generator.feature → rtlr.feature} +43 -15
  6. data/features/error_reporting/automatic_error_messages.feature +40 -0
  7. data/features/error_reporting/custom_error_messages.feature +28 -0
  8. data/features/examples/json_parser.markdown +88 -0
  9. data/features/{grammar → extended_matching_syntax}/back_reference.feature +5 -3
  10. data/features/{grammar → extended_matching_syntax}/e_symbol.feature +2 -2
  11. data/features/{grammar → extended_matching_syntax}/eof.feature +4 -3
  12. data/features/{grammar → extended_matching_syntax}/fail.feature +8 -6
  13. data/features/extended_matching_syntax/fragments.feature +29 -0
  14. data/features/extended_matching_syntax/include.feature +42 -0
  15. data/features/{grammar → extended_matching_syntax}/list_matching.feature +7 -6
  16. data/features/extended_matching_syntax/posix_class.feature +127 -0
  17. data/features/{grammar → extended_matching_syntax}/repeat.feature +29 -3
  18. data/features/{grammar → extended_matching_syntax}/skip_operator.feature +2 -1
  19. data/features/extended_matching_syntax/super.feature +24 -0
  20. data/features/{grammar → extended_matching_syntax}/token.feature +6 -5
  21. data/features/{grammar → extended_matching_syntax}/whitespace.feature +7 -6
  22. data/features/{grammar → extended_matching_syntax}/word_literal.feature +10 -6
  23. data/features/grammar_heading/explicit_start_rule.feature +20 -0
  24. data/features/grammar_heading/grammar_declaration.feature +60 -0
  25. data/features/grammar_heading/include.feature +19 -0
  26. data/features/grammar_heading/require.feature +27 -0
  27. data/features/{grammar → peg_syntax}/any_character.feature +1 -1
  28. data/features/peg_syntax/character_class.feature +25 -0
  29. data/features/{grammar → peg_syntax}/comments.feature +1 -1
  30. data/features/{grammar → peg_syntax}/literal.feature +5 -3
  31. data/features/{grammar → peg_syntax}/negative_lookahead.feature +5 -3
  32. data/features/peg_syntax/nonterminal.feature +46 -0
  33. data/features/peg_syntax/one_or_more.feature +59 -0
  34. data/features/{grammar → peg_syntax}/optional.feature +2 -2
  35. data/features/peg_syntax/ordered_choice.feature +24 -0
  36. data/features/{grammar → peg_syntax}/positive_lookahead.feature +6 -4
  37. data/features/peg_syntax/sequence.feature +23 -0
  38. data/features/{grammar → peg_syntax}/start_rule.feature +1 -1
  39. data/features/peg_syntax/zero_or_more.feature +59 -0
  40. data/features/{grammar → semantics}/labels.feature +0 -0
  41. data/features/{grammar → semantics}/negative_semantic_predicate.feature +30 -9
  42. data/features/{grammar → semantics}/node_action.feature +0 -0
  43. data/features/{grammar → semantics}/positive_semantic_predicate.feature +29 -8
  44. data/features/{grammar/symantic_action.feature → semantics/semantic_action.feature} +2 -2
  45. data/features/semantics/semantic_result.feature +86 -0
  46. data/features/{grammar → semantics}/side_effect.feature +33 -21
  47. data/features/step_definitions/cli_steps.rb +1 -1
  48. data/features/step_definitions/grammar_steps.rb +19 -5
  49. data/features/support/env.rb +5 -0
  50. data/lib/rattler.rb +21 -44
  51. data/lib/rattler/compiler.rb +69 -0
  52. data/lib/rattler/{grammar → compiler}/grammar_parser.rb +58 -24
  53. data/lib/rattler/compiler/metagrammar.rb +1570 -0
  54. data/lib/rattler/compiler/optimizer.rb +77 -0
  55. data/lib/rattler/{back_end → compiler}/optimizer/composite_reducing.rb +2 -2
  56. data/lib/rattler/{back_end → compiler}/optimizer/flatten_choice.rb +3 -12
  57. data/lib/rattler/{back_end → compiler}/optimizer/flatten_sequence.rb +4 -16
  58. data/lib/rattler/{back_end → compiler}/optimizer/flattening.rb +2 -2
  59. data/lib/rattler/compiler/optimizer/inline_regular_rules.rb +24 -0
  60. data/lib/rattler/{back_end → compiler}/optimizer/join_match_capturing_sequence.rb +16 -14
  61. data/lib/rattler/{back_end → compiler}/optimizer/join_match_choice.rb +4 -13
  62. data/lib/rattler/{back_end → compiler}/optimizer/join_match_matching_sequence.rb +4 -13
  63. data/lib/rattler/compiler/optimizer/join_match_sequence.rb +7 -0
  64. data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_bare_match.rb +3 -12
  65. data/lib/rattler/compiler/optimizer/join_predicate_match.rb +7 -0
  66. data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_nested_match.rb +4 -13
  67. data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_or_bare_match.rb +3 -12
  68. data/lib/rattler/compiler/optimizer/join_predicate_or_match.rb +7 -0
  69. data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_or_nested_match.rb +4 -13
  70. data/lib/rattler/{back_end → compiler}/optimizer/match_joining.rb +2 -2
  71. data/lib/rattler/{back_end → compiler}/optimizer/optimization.rb +12 -34
  72. data/lib/rattler/compiler/optimizer/optimization_context.rb +83 -0
  73. data/lib/rattler/{back_end → compiler}/optimizer/optimization_sequence.rb +3 -11
  74. data/lib/rattler/compiler/optimizer/optimizations.rb +27 -0
  75. data/lib/rattler/{back_end → compiler}/optimizer/optimize_children.rb +6 -14
  76. data/lib/rattler/{back_end → compiler}/optimizer/reduce_repeat_match.rb +4 -13
  77. data/lib/rattler/compiler/optimizer/remove_meaningless_wrapper.rb +22 -0
  78. data/lib/rattler/{back_end → compiler}/optimizer/simplify_redundant_repeat.rb +4 -13
  79. data/lib/rattler/{back_end → compiler}/optimizer/simplify_token_match.rb +4 -13
  80. data/lib/rattler/compiler/parser_generator.rb +108 -0
  81. data/lib/rattler/{back_end → compiler}/parser_generator/apply_generator.rb +7 -21
  82. data/lib/rattler/{back_end → compiler}/parser_generator/assert_generator.rb +11 -19
  83. data/lib/rattler/compiler/parser_generator/attributed_sequence_generator.rb +37 -0
  84. data/lib/rattler/{back_end → compiler}/parser_generator/back_reference_generator.rb +10 -10
  85. data/lib/rattler/{back_end → compiler}/parser_generator/choice_generator.rb +10 -22
  86. data/lib/rattler/{back_end → compiler}/parser_generator/delegating_generator.rb +2 -2
  87. data/lib/rattler/{back_end → compiler}/parser_generator/disallow_generator.rb +11 -19
  88. data/lib/rattler/{back_end → compiler}/parser_generator/e_symbol_generator.rb +2 -10
  89. data/lib/rattler/{back_end → compiler}/parser_generator/eof_generator.rb +2 -10
  90. data/lib/rattler/{back_end → compiler}/parser_generator/expr_generator.rb +9 -35
  91. data/lib/rattler/{back_end → compiler}/parser_generator/fail_generator.rb +7 -3
  92. data/lib/rattler/{back_end → compiler}/parser_generator/gen_method_names.rb +3 -5
  93. data/lib/rattler/{back_end → compiler}/parser_generator/general_list_generator.rb +6 -18
  94. data/lib/rattler/{back_end → compiler}/parser_generator/general_repeat_generator.rb +16 -22
  95. data/lib/rattler/{back_end/parser_generator/rule_set_generator.rb → compiler/parser_generator/grammar_generator.rb} +24 -33
  96. data/lib/rattler/compiler/parser_generator/group_match.rb +33 -0
  97. data/lib/rattler/{back_end → compiler}/parser_generator/group_match_generator.rb +4 -17
  98. data/lib/rattler/compiler/parser_generator/label_generator.rb +37 -0
  99. data/lib/rattler/{back_end → compiler}/parser_generator/list0_generating.rb +5 -5
  100. data/lib/rattler/{back_end → compiler}/parser_generator/list1_generating.rb +3 -3
  101. data/lib/rattler/{back_end → compiler}/parser_generator/list_generator.rb +2 -2
  102. data/lib/rattler/{back_end → compiler}/parser_generator/match_generator.rb +10 -10
  103. data/lib/rattler/{back_end → compiler}/parser_generator/nested.rb +2 -2
  104. data/lib/rattler/compiler/parser_generator/node_action_generator.rb +49 -0
  105. data/lib/rattler/{back_end → compiler}/parser_generator/one_or_more_generating.rb +3 -3
  106. data/lib/rattler/{back_end → compiler}/parser_generator/optional_generating.rb +6 -22
  107. data/lib/rattler/compiler/parser_generator/predicate_propogating.rb +24 -0
  108. data/lib/rattler/{back_end → compiler}/parser_generator/repeat_generator.rb +2 -2
  109. data/lib/rattler/compiler/parser_generator/rule_generator.rb +66 -0
  110. data/lib/rattler/compiler/parser_generator/rule_set_generator.rb +33 -0
  111. data/lib/rattler/compiler/parser_generator/semantic_action_generator.rb +58 -0
  112. data/lib/rattler/compiler/parser_generator/sequence_generating.rb +138 -0
  113. data/lib/rattler/compiler/parser_generator/sequence_generator.rb +57 -0
  114. data/lib/rattler/{back_end → compiler}/parser_generator/skip_generator.rb +4 -18
  115. data/lib/rattler/compiler/parser_generator/skip_propogating.rb +16 -0
  116. data/lib/rattler/{back_end → compiler}/parser_generator/sub_generating.rb +19 -11
  117. data/lib/rattler/compiler/parser_generator/super_generator.rb +54 -0
  118. data/lib/rattler/{back_end → compiler}/parser_generator/token_generator.rb +3 -3
  119. data/lib/rattler/compiler/parser_generator/token_propogating.rb +10 -0
  120. data/lib/rattler/{back_end → compiler}/parser_generator/top_level.rb +2 -2
  121. data/lib/rattler/{back_end → compiler}/parser_generator/zero_or_more_generating.rb +5 -5
  122. data/lib/rattler/compiler/rattler.rtlr +201 -0
  123. data/lib/rattler/{back_end → compiler}/ruby_generator.rb +16 -25
  124. data/lib/rattler/parsers.rb +12 -33
  125. data/lib/rattler/parsers/action_code.rb +25 -16
  126. data/lib/rattler/{grammar → parsers}/analysis.rb +32 -11
  127. data/lib/rattler/parsers/apply.rb +10 -19
  128. data/lib/rattler/parsers/assert.rb +4 -14
  129. data/lib/rattler/parsers/atomic.rb +3 -10
  130. data/lib/rattler/parsers/attributed_sequence.rb +50 -0
  131. data/lib/rattler/parsers/back_reference.rb +19 -14
  132. data/lib/rattler/parsers/choice.rb +11 -12
  133. data/lib/rattler/parsers/combinator_parser.rb +15 -7
  134. data/lib/rattler/parsers/combining.rb +15 -9
  135. data/lib/rattler/parsers/disallow.rb +5 -12
  136. data/lib/rattler/parsers/e_symbol.rb +5 -14
  137. data/lib/rattler/parsers/eof.rb +10 -15
  138. data/lib/rattler/parsers/fail.rb +16 -26
  139. data/lib/rattler/{grammar → parsers}/grammar.rb +15 -20
  140. data/lib/rattler/parsers/label.rb +10 -16
  141. data/lib/rattler/parsers/list_parser.rb +14 -14
  142. data/lib/rattler/parsers/match.rb +5 -17
  143. data/lib/rattler/parsers/node_action.rb +72 -0
  144. data/lib/rattler/parsers/node_code.rb +47 -30
  145. data/lib/rattler/parsers/parser.rb +63 -32
  146. data/lib/rattler/parsers/parser_scope.rb +88 -0
  147. data/lib/rattler/parsers/predicate.rb +12 -10
  148. data/lib/rattler/parsers/repeat.rb +15 -8
  149. data/lib/rattler/parsers/rule.rb +8 -23
  150. data/lib/rattler/parsers/rule_set.rb +67 -12
  151. data/lib/rattler/parsers/semantic.rb +36 -0
  152. data/lib/rattler/parsers/semantic_action.rb +39 -0
  153. data/lib/rattler/parsers/sequence.rb +25 -40
  154. data/lib/rattler/parsers/sequencing.rb +40 -0
  155. data/lib/rattler/parsers/skip.rb +11 -12
  156. data/lib/rattler/parsers/super.rb +33 -0
  157. data/lib/rattler/parsers/token.rb +3 -13
  158. data/lib/rattler/rake_task.rb +50 -0
  159. data/lib/rattler/runner.rb +19 -22
  160. data/lib/rattler/runtime.rb +0 -10
  161. data/lib/rattler/runtime/extended_packrat_parser.rb +40 -45
  162. data/lib/rattler/runtime/packrat_parser.rb +17 -31
  163. data/lib/rattler/runtime/parse_failure.rb +16 -26
  164. data/lib/rattler/runtime/parse_node.rb +8 -18
  165. data/lib/rattler/runtime/parser.rb +6 -18
  166. data/lib/rattler/runtime/parser_helper.rb +3 -10
  167. data/lib/rattler/runtime/recursive_descent_parser.rb +26 -23
  168. data/lib/rattler/runtime/syntax_error.rb +0 -10
  169. data/lib/rattler/util.rb +2 -6
  170. data/lib/rattler/util/grammar_cli.rb +19 -0
  171. data/lib/rattler/util/graphviz.rb +6 -17
  172. data/lib/rattler/util/graphviz/digraph_builder.rb +10 -17
  173. data/lib/rattler/util/graphviz/node_builder.rb +45 -31
  174. data/lib/rattler/util/line_counter.rb +11 -20
  175. data/lib/rattler/util/node.rb +52 -30
  176. data/lib/rattler/util/parser_cli.rb +84 -0
  177. data/lib/rattler/util/parser_spec_helper.rb +8 -12
  178. data/spec/rattler/compiler/assert_compiler_examples.rb +284 -0
  179. data/spec/rattler/compiler/attributed_sequence_compiler_examples.rb +154 -0
  180. data/spec/rattler/compiler/disallow_compiler_examples.rb +293 -0
  181. data/spec/rattler/compiler/grammar_parser_spec.rb +700 -0
  182. data/spec/rattler/{back_end → compiler}/optimizer/flatten_choice_spec.rb +1 -1
  183. data/spec/rattler/{back_end → compiler}/optimizer/flatten_sequence_spec.rb +1 -1
  184. data/spec/rattler/compiler/optimizer/inline_regular_rules_spec.rb +50 -0
  185. data/spec/rattler/{back_end → compiler}/optimizer/join_match_capturing_sequence_spec.rb +106 -22
  186. data/spec/rattler/{back_end → compiler}/optimizer/join_match_choice_spec.rb +1 -1
  187. data/spec/rattler/{back_end → compiler}/optimizer/join_match_matching_sequence_spec.rb +1 -1
  188. data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_bare_match_spec.rb +1 -1
  189. data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_nested_match_spec.rb +1 -1
  190. data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_or_bare_match_spec.rb +1 -1
  191. data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_or_nested_match_spec.rb +1 -1
  192. data/spec/rattler/{back_end → compiler}/optimizer/reduce_repeat_match_spec.rb +1 -1
  193. data/spec/rattler/compiler/optimizer/remove_meaningless_wrapper_spec.rb +82 -0
  194. data/spec/rattler/{back_end → compiler}/optimizer/simplify_redundant_repeat_spec.rb +1 -1
  195. data/spec/rattler/{back_end → compiler}/optimizer/simplify_token_match_spec.rb +1 -1
  196. data/spec/rattler/{back_end → compiler}/optimizer_spec.rb +1 -1
  197. data/spec/rattler/{back_end → compiler}/parser_generator/apply_generator_spec.rb +1 -39
  198. data/spec/rattler/{back_end → compiler}/parser_generator/assert_generator_spec.rb +1 -55
  199. data/spec/rattler/compiler/parser_generator/attributed_sequence_generator_spec.rb +699 -0
  200. data/spec/rattler/{back_end → compiler}/parser_generator/back_reference_generator_spec.rb +3 -56
  201. data/spec/rattler/{back_end → compiler}/parser_generator/choice_generator_spec.rb +1 -63
  202. data/spec/rattler/{back_end → compiler}/parser_generator/disallow_generator_spec.rb +1 -55
  203. data/spec/rattler/{back_end → compiler}/parser_generator/e_symbol_generator_spec.rb +1 -39
  204. data/spec/rattler/{back_end → compiler}/parser_generator/eof_generator_spec.rb +1 -39
  205. data/spec/rattler/{back_end → compiler}/parser_generator/fail_generator_spec.rb +94 -23
  206. data/spec/rattler/compiler/parser_generator/grammar_generator_spec.rb +98 -0
  207. data/spec/rattler/compiler/parser_generator/group_match_generator_spec.rb +67 -0
  208. data/spec/rattler/{back_end → compiler}/parser_generator/group_match_spec.rb +1 -1
  209. data/spec/rattler/{back_end → compiler}/parser_generator/label_generator_spec.rb +1 -55
  210. data/spec/rattler/{back_end → compiler}/parser_generator/list0_generator_examples.rb +0 -88
  211. data/spec/rattler/{back_end → compiler}/parser_generator/list1_generator_examples.rb +0 -88
  212. data/spec/rattler/{back_end → compiler}/parser_generator/list_generator_spec.rb +1 -227
  213. data/spec/rattler/{back_end → compiler}/parser_generator/match_generator_spec.rb +1 -55
  214. data/spec/rattler/compiler/parser_generator/node_action_generator_spec.rb +135 -0
  215. data/spec/rattler/{back_end → compiler}/parser_generator/one_or_more_generator_examples.rb +0 -74
  216. data/spec/rattler/{back_end → compiler}/parser_generator/optional_generator_examples.rb +0 -62
  217. data/spec/rattler/{back_end → compiler}/parser_generator/repeat_generator_spec.rb +66 -1
  218. data/spec/rattler/{back_end → compiler}/parser_generator/rule_generator_spec.rb +3 -2
  219. data/spec/rattler/{back_end → compiler}/parser_generator/rule_set_generator_spec.rb +9 -27
  220. data/spec/rattler/compiler/parser_generator/semantic_action_generator_spec.rb +437 -0
  221. data/spec/rattler/{back_end → compiler}/parser_generator/sequence_generator_spec.rb +234 -68
  222. data/spec/rattler/{back_end → compiler}/parser_generator/skip_generator_spec.rb +1 -55
  223. data/spec/rattler/compiler/parser_generator/super_generator_spec.rb +93 -0
  224. data/spec/rattler/{back_end → compiler}/parser_generator/token_generator_spec.rb +1 -55
  225. data/spec/rattler/{back_end → compiler}/parser_generator/zero_or_more_generator_examples.rb +0 -74
  226. data/spec/rattler/{back_end → compiler}/ruby_generator_spec.rb +13 -13
  227. data/spec/rattler/compiler/semantic_action_compiler_examples.rb +57 -0
  228. data/spec/rattler/{back_end → compiler}/shared_compiler_examples.rb +111 -140
  229. data/spec/rattler/{back_end → compiler}/skip_compiler_examples.rb +60 -57
  230. data/spec/rattler/{back_end → compiler}/token_compiler_examples.rb +99 -104
  231. data/spec/rattler/compiler_spec.rb +67 -0
  232. data/spec/rattler/parsers/action_code_spec.rb +34 -18
  233. data/spec/rattler/{grammar → parsers}/analysis_spec.rb +13 -67
  234. data/spec/rattler/parsers/apply_spec.rb +6 -0
  235. data/spec/rattler/parsers/assert_spec.rb +38 -2
  236. data/spec/rattler/parsers/attributed_sequence_spec.rb +204 -0
  237. data/spec/rattler/parsers/back_reference_spec.rb +6 -0
  238. data/spec/rattler/parsers/choice_spec.rb +38 -1
  239. data/spec/rattler/parsers/combinator_parser_spec.rb +2 -1
  240. data/spec/rattler/parsers/disallow_spec.rb +38 -2
  241. data/spec/rattler/parsers/e_symbol_spec.rb +6 -0
  242. data/spec/rattler/parsers/eof_spec.rb +6 -0
  243. data/spec/rattler/parsers/fail_spec.rb +6 -0
  244. data/spec/rattler/{grammar → parsers}/grammar_spec.rb +10 -15
  245. data/spec/rattler/parsers/label_spec.rb +30 -0
  246. data/spec/rattler/parsers/list_parser_spec.rb +31 -2
  247. data/spec/rattler/parsers/match_spec.rb +6 -0
  248. data/spec/rattler/parsers/node_action_spec.rb +121 -0
  249. data/spec/rattler/parsers/parser_scope_spec.rb +105 -0
  250. data/spec/rattler/parsers/repeat_spec.rb +56 -0
  251. data/spec/rattler/parsers/rule_set_spec.rb +42 -0
  252. data/spec/rattler/parsers/semantic_action_spec.rb +89 -0
  253. data/spec/rattler/parsers/sequence_spec.rb +156 -12
  254. data/spec/rattler/parsers/skip_spec.rb +21 -0
  255. data/spec/rattler/parsers/super_spec.rb +45 -0
  256. data/spec/rattler/parsers/token_spec.rb +33 -14
  257. data/spec/rattler/runtime/extended_packrat_parser_spec.rb +10 -8
  258. data/spec/rattler/runtime/recursive_descent_parser_spec.rb +26 -0
  259. data/spec/rattler/runtime/shared_parser_examples.rb +22 -16
  260. data/spec/rattler/util/graphviz/node_builder_spec.rb +33 -17
  261. data/spec/rattler/util/line_counter_spec.rb +21 -21
  262. data/spec/rattler/util/node_spec.rb +62 -0
  263. data/spec/rattler_spec.rb +7 -41
  264. data/spec/spec_helper.rb +1 -2
  265. data/spec/support/combinator_parser_spec_helper.rb +1 -1
  266. data/spec/support/compiler_spec_helper.rb +0 -4
  267. data/spec/support/parser_generator_spec_helper.rb +7 -7
  268. data/spec/support/runtime_parser_spec_helper.rb +57 -3
  269. metadata +447 -303
  270. data/features/grammar/character_class.feature +0 -20
  271. data/features/grammar/nonterminal.feature +0 -24
  272. data/features/grammar/one_or_more.feature +0 -34
  273. data/features/grammar/ordered_choice.feature +0 -21
  274. data/features/grammar/posix_class.feature +0 -70
  275. data/features/grammar/sequence.feature +0 -20
  276. data/features/grammar/zero_or_more.feature +0 -34
  277. data/lib/rattler/back_end.rb +0 -22
  278. data/lib/rattler/back_end/compiler.rb +0 -128
  279. data/lib/rattler/back_end/optimizer.rb +0 -101
  280. data/lib/rattler/back_end/optimizer/inline_regular_rules.rb +0 -46
  281. data/lib/rattler/back_end/optimizer/join_match_sequence.rb +0 -17
  282. data/lib/rattler/back_end/optimizer/join_predicate_match.rb +0 -17
  283. data/lib/rattler/back_end/optimizer/join_predicate_or_match.rb +0 -17
  284. data/lib/rattler/back_end/optimizer/optimization_context.rb +0 -72
  285. data/lib/rattler/back_end/optimizer/remove_meaningless_wrapper.rb +0 -32
  286. data/lib/rattler/back_end/optimizer/specialize_repeat.rb +0 -40
  287. data/lib/rattler/back_end/parser_generator.rb +0 -113
  288. data/lib/rattler/back_end/parser_generator/direct_action_generator.rb +0 -45
  289. data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rb +0 -45
  290. data/lib/rattler/back_end/parser_generator/group_match.rb +0 -26
  291. data/lib/rattler/back_end/parser_generator/label_generator.rb +0 -64
  292. data/lib/rattler/back_end/parser_generator/predicate_propogating.rb +0 -24
  293. data/lib/rattler/back_end/parser_generator/rule_generator.rb +0 -53
  294. data/lib/rattler/back_end/parser_generator/sequence_generator.rb +0 -190
  295. data/lib/rattler/back_end/parser_generator/skip_propogating.rb +0 -16
  296. data/lib/rattler/back_end/parser_generator/token_propogating.rb +0 -10
  297. data/lib/rattler/grammar.rb +0 -43
  298. data/lib/rattler/grammar/grammar_dsl.rb +0 -51
  299. data/lib/rattler/grammar/metagrammar.rb +0 -990
  300. data/lib/rattler/grammar/rattler.rtlr +0 -183
  301. data/lib/rattler/parsers/assert_code.rb +0 -31
  302. data/lib/rattler/parsers/direct_action.rb +0 -85
  303. data/lib/rattler/parsers/disallow_code.rb +0 -31
  304. data/lib/rattler/parsers/dispatch_action.rb +0 -121
  305. data/lib/rattler/parsers/effect_code.rb +0 -31
  306. data/lib/rattler/parsers/parser_dsl.rb +0 -414
  307. data/lib/rattler/parsers/semantic_assert.rb +0 -19
  308. data/lib/rattler/parsers/semantic_disallow.rb +0 -19
  309. data/lib/rattler/parsers/side_effect.rb +0 -19
  310. data/spec/rattler/back_end/assert_compiler_examples.rb +0 -187
  311. data/spec/rattler/back_end/compiler_spec.rb +0 -43
  312. data/spec/rattler/back_end/direct_action_compiler_examples.rb +0 -227
  313. data/spec/rattler/back_end/disallow_compiler_examples.rb +0 -187
  314. data/spec/rattler/back_end/dispatch_action_compiler_examples.rb +0 -225
  315. data/spec/rattler/back_end/optimizer/inline_regular_rules_spec.rb +0 -80
  316. data/spec/rattler/back_end/parser_generator/direct_action_generator_spec.rb +0 -204
  317. data/spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb +0 -204
  318. data/spec/rattler/back_end/parser_generator/group_match_generator_spec.rb +0 -185
  319. data/spec/rattler/back_end/semantic_assert_compiler_examples.rb +0 -152
  320. data/spec/rattler/back_end/semantic_disallow_compiler_examples.rb +0 -152
  321. data/spec/rattler/back_end/side_effect_compiler_examples.rb +0 -227
  322. data/spec/rattler/grammar/grammar_parser_spec.rb +0 -626
  323. data/spec/rattler/parsers/direct_action_spec.rb +0 -224
  324. data/spec/rattler/parsers/dispatch_action_spec.rb +0 -209
  325. data/spec/rattler/parsers/node_code_spec.rb +0 -59
  326. data/spec/rattler/parsers/parser_dsl_spec.rb +0 -334
  327. data/spec/rattler/parsers/semantic_assert_spec.rb +0 -83
  328. data/spec/rattler/parsers/semantic_disallow_spec.rb +0 -83
  329. data/spec/rattler/parsers/side_effect_spec.rb +0 -214
@@ -1,990 +0,0 @@
1
- require 'rattler/grammar'
2
-
3
- module Rattler
4
- module Grammar
5
- # @private
6
- module Metagrammar #:nodoc:
7
-
8
- include Rattler::Parsers
9
-
10
- # @private
11
- def start_rule #:nodoc:
12
- :grammar
13
- end
14
-
15
- # @private
16
- def match_grammar #:nodoc:
17
- p0 = @scanner.pos
18
- begin
19
- (r0_0 = begin
20
- p1 = @scanner.pos
21
- begin
22
- (r1_0 = begin
23
- a0 = []
24
- while r = begin
25
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>require)(?![[:alnum:]_])))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?!(?>(?>[[:blank:]])*)(?>\z|;|(?>(?>\r)?)(?>\n)|(?>\#)(?>(?>[^\n])*)))(?>.))+))(?>(?>(?>[[:blank:]])*)(?>\z|;|(?>(?>\r)?)(?>\n)|(?>\#)(?>(?>[^\n])*)))/) &&
26
- @scanner[1]
27
- end
28
- a0 << r
29
- end
30
- ({ :requires => select_captures(a0) })
31
- end) &&
32
- (r1_1 = ((r = begin
33
- begin
34
- p2 = @scanner.pos
35
- begin
36
- (r2_0 = begin
37
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>parser)(?![[:alnum:]_])))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>(?>[[:upper:]])(?>(?>[[:alnum:]_])*)(?>::))*)(?>[[:upper:]])(?>(?>[[:alnum:]_])*)))/) &&
38
- @scanner[1]
39
- end) &&
40
- (r2_1 = ((r = begin
41
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>(?>[[:upper:]])(?>(?>[[:alnum:]_])*)(?>::))*)(?>[[:upper:]])(?>(?>[[:alnum:]_])*)))/) &&
42
- @scanner[1]
43
- end) ? [r] : [])) &&
44
- @scanner.skip(/(?>(?>(?>[[:blank:]])*)(?>\z|;|(?>(?>\r)?)(?>\n)|(?>\#)(?>(?>[^\n])*)))/) &&
45
- (parser_decl r2_0, r2_1)
46
- end || begin
47
- @scanner.pos = p2
48
- false
49
- end
50
- end ||
51
- begin
52
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>grammar)(?![[:alnum:]_])))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>(?>[[:upper:]])(?>(?>[[:alnum:]_])*)(?>::))*)(?>[[:upper:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>[[:blank:]])*)(?>\z|;|(?>(?>\r)?)(?>\n)|(?>\#)(?>(?>[^\n])*)))/) &&
53
- ({ :grammar_name => @scanner[1] })
54
- end
55
- end) ? [r] : [])) &&
56
- (r1_2 = begin
57
- a0 = []
58
- while r = begin
59
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>include)(?![[:alnum:]_])))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>(?>[[:upper:]])(?>(?>[[:alnum:]_])*)(?>::))*)(?>[[:upper:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>[[:blank:]])*)(?>\z|;|(?>(?>\r)?)(?>\n)|(?>\#)(?>(?>[^\n])*)))/) &&
60
- @scanner[1]
61
- end
62
- a0 << r
63
- end
64
- ({ :includes => select_captures(a0) })
65
- end) &&
66
- (heading r1_0, r1_1, r1_2)
67
- end || begin
68
- @scanner.pos = p1
69
- false
70
- end
71
- end) &&
72
- (r0_1 = begin
73
- a0 = []
74
- while r = begin
75
- begin
76
- p1 = @scanner.pos
77
- begin
78
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>%whitespace)(?![[:alnum:]_]))/) &&
79
- (r1_0 = match(:unattributed)) &&
80
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{)/) &&
81
- (start_ws r1_0)
82
- end || begin
83
- @scanner.pos = p1
84
- false
85
- end
86
- end ||
87
- begin
88
- p1 = @scanner.pos
89
- begin
90
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>%whitespace)(?![[:alnum:]_]))/) &&
91
- (r1_0 = match(:unattributed)) &&
92
- (set_ws r1_0)
93
- end || begin
94
- @scanner.pos = p1
95
- false
96
- end
97
- end ||
98
- begin
99
- p1 = @scanner.pos
100
- begin
101
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>%word_character)(?![[:alnum:]_]))/) &&
102
- (r1_0 = match(:unattributed)) &&
103
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{)/) &&
104
- (start_wc r1_0)
105
- end || begin
106
- @scanner.pos = p1
107
- false
108
- end
109
- end ||
110
- begin
111
- p1 = @scanner.pos
112
- begin
113
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>%word_character)(?![[:alnum:]_]))/) &&
114
- (r1_0 = match(:unattributed)) &&
115
- (set_wc r1_0)
116
- end || begin
117
- @scanner.pos = p1
118
- false
119
- end
120
- end ||
121
- begin
122
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>%inline)(?![[:alnum:]_])))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{))/) &&
123
- (start_inline)
124
- end ||
125
- begin
126
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>%inline)(?![[:alnum:]_]))/) &&
127
- (set_inline)
128
- end ||
129
- begin
130
- p1 = @scanner.pos
131
- begin
132
- @scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>EOF)(?![[:alnum:]_])))/) &&
133
- (r1_0 = begin
134
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:alpha:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><\-))/) &&
135
- @scanner[1]
136
- end) &&
137
- (r1_1 = match(:expression)) &&
138
- (rule r1_0, r1_1)
139
- end || begin
140
- @scanner.pos = p1
141
- false
142
- end
143
- end ||
144
- begin
145
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\})/) &&
146
- (end_block)
147
- end
148
- end
149
- a0 << r
150
- end
151
- RuleSet.parsed(select_captures(a0)) unless a0.empty?
152
- end) &&
153
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)\z/) &&
154
- Grammar.parsed([r0_0, r0_1])
155
- end || begin
156
- @scanner.pos = p0
157
- false
158
- end
159
- end
160
-
161
- # @private
162
- def match_unattributed #:nodoc:
163
- memoize_lr :match_unattributed!
164
- end
165
-
166
- # @private
167
- def match_unattributed! #:nodoc:
168
- begin
169
- p0 = @scanner.pos
170
- begin
171
- (r0_0 = match(:unattributed)) &&
172
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\/)/) &&
173
- (r0_1 = match(:terms)) &&
174
- Choice.parsed(select_captures([r0_0, r0_1]))
175
- end || begin
176
- @scanner.pos = p0
177
- false
178
- end
179
- end ||
180
- match(:terms)
181
- end
182
-
183
- # @private
184
- def match_expression #:nodoc:
185
- memoize_lr :match_expression!
186
- end
187
-
188
- # @private
189
- def match_expression! #:nodoc:
190
- begin
191
- p0 = @scanner.pos
192
- begin
193
- (r0_0 = match(:expression)) &&
194
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\/)/) &&
195
- (r0_1 = match(:attributed)) &&
196
- Choice.parsed(select_captures([r0_0, r0_1]))
197
- end || begin
198
- @scanner.pos = p0
199
- false
200
- end
201
- end ||
202
- match(:attributed)
203
- end
204
-
205
- # @private
206
- def match_attributed #:nodoc:
207
- memoize_lr :match_attributed!
208
- end
209
-
210
- # @private
211
- def match_attributed! #:nodoc:
212
- begin
213
- p0 = @scanner.pos
214
- begin
215
- (r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
216
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><)/) &&
217
- (r0_1 = ((r = begin
218
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>[[:lower:]])(?>(?>[[:alnum:]_])*))|(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>(?>(?>[[:upper:]])(?>(?>[[:alnum:]_])*)(?>::))*)(?>[[:upper:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>\.)(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>[[:lower:]])(?>(?>[[:alnum:]_])*))))?))/) &&
219
- @scanner[1]
220
- end) ? [r] : [])) &&
221
- (r0_2 = ((r = begin
222
- begin
223
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>")(?>(?>(?>\\)(?>.)|[^"])*)(?>"))/) &&
224
- @scanner[1]
225
- end ||
226
- begin
227
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>')(?>(?>(?>\\)(?>.)|[^'])*)(?>'))/) &&
228
- @scanner[1]
229
- end ||
230
- begin
231
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\()(?>(?>(?>\\)(?>.)|[^)])*)(?>\)))/) &&
232
- @scanner[1]
233
- end ||
234
- begin
235
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\{)(?>(?>(?>\\)(?>.)|[^}])*)(?>\}))/) &&
236
- @scanner[1]
237
- end ||
238
- begin
239
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\[)(?>(?>(?>\\)(?>.)|[^\]])*)(?>\]))/) &&
240
- @scanner[1]
241
- end ||
242
- begin
243
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%<)(?>(?>(?>\\)(?>.)|[^>])*)(?>>))/) &&
244
- @scanner[1]
245
- end ||
246
- begin
247
- p1 = @scanner.pos
248
- begin
249
- @scanner.skip(/(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*/) &&
250
- begin
251
- p2 = @scanner.pos
252
- begin
253
- @scanner.skip(/%/) &&
254
- (r2_0 = @scanner.scan(/[[:punct:]]/)) &&
255
- begin
256
- while begin
257
- @scanner.skip(/(?>\\)(?>.)/) ||
258
- begin
259
- p3 = @scanner.pos
260
- begin
261
- @scanner.skip(/(?!#{r2_0})/) &&
262
- @scanner.skip(/./) &&
263
- true
264
- end || begin
265
- @scanner.pos = p3
266
- false
267
- end
268
- end
269
- end; end
270
- true
271
- end &&
272
- @scanner.skip(/#{r2_0}/) &&
273
- @scanner.string[p2...(@scanner.pos)]
274
- end || begin
275
- @scanner.pos = p2
276
- false
277
- end
278
- end
279
- end || begin
280
- @scanner.pos = p1
281
- false
282
- end
283
- end
284
- end) ? [r] : [])) &&
285
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>>)/) &&
286
- DispatchAction.parsed([r0_0, r0_1, r0_2])
287
- end || begin
288
- @scanner.pos = p0
289
- false
290
- end
291
- end ||
292
- begin
293
- p0 = @scanner.pos
294
- begin
295
- (r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
296
- (r0_1 = begin
297
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>\{)(?>(?>[^}])*)(?>\})|[^{}])*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\}))/) &&
298
- @scanner[1]
299
- end) &&
300
- DirectAction.parsed([r0_0, r0_1])
301
- end || begin
302
- @scanner.pos = p0
303
- false
304
- end
305
- end ||
306
- begin
307
- p0 = @scanner.pos
308
- begin
309
- (r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
310
- (r0_1 = begin
311
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>~))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>\{)(?>(?>[^}])*)(?>\})|[^{}])*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\}))/) &&
312
- @scanner[1]
313
- end) &&
314
- SideEffect.parsed([r0_0, r0_1])
315
- end || begin
316
- @scanner.pos = p0
317
- false
318
- end
319
- end ||
320
- begin
321
- p0 = @scanner.pos
322
- begin
323
- (r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
324
- (r0_1 = begin
325
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>&))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>\{)(?>(?>[^}])*)(?>\})|[^{}])*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\}))/) &&
326
- @scanner[1]
327
- end) &&
328
- SemanticAssert.parsed([r0_0, r0_1])
329
- end || begin
330
- @scanner.pos = p0
331
- false
332
- end
333
- end ||
334
- begin
335
- p0 = @scanner.pos
336
- begin
337
- (r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
338
- (r0_1 = begin
339
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>!))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>\{)(?>(?>[^}])*)(?>\})|[^{}])*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\}))/) &&
340
- @scanner[1]
341
- end) &&
342
- SemanticDisallow.parsed([r0_0, r0_1])
343
- end || begin
344
- @scanner.pos = p0
345
- false
346
- end
347
- end ||
348
- match(:attributed_terms)
349
- end
350
-
351
- # @private
352
- def match_attributed_terms #:nodoc:
353
- memoize_lr :match_attributed_terms!
354
- end
355
-
356
- # @private
357
- def match_attributed_terms! #:nodoc:
358
- begin
359
- p0 = @scanner.pos
360
- begin
361
- (r0_0 = match(:attributed)) &&
362
- (r0_1 = match(:term)) &&
363
- Sequence.parsed(select_captures([r0_0, r0_1]))
364
- end || begin
365
- @scanner.pos = p0
366
- false
367
- end
368
- end ||
369
- match(:terms)
370
- end
371
-
372
- # @private
373
- def match_terms #:nodoc:
374
- memoize_lr :match_terms!
375
- end
376
-
377
- # @private
378
- def match_terms! #:nodoc:
379
- begin
380
- p0 = @scanner.pos
381
- begin
382
- (r0_0 = match(:terms)) &&
383
- (r0_1 = match(:term)) &&
384
- Sequence.parsed(select_captures([r0_0, r0_1]))
385
- end || begin
386
- @scanner.pos = p0
387
- false
388
- end
389
- end ||
390
- match(:term)
391
- end
392
-
393
- # @private
394
- def match_term #:nodoc:
395
- memoize :match_term!
396
- end
397
-
398
- # @private
399
- def match_term! #:nodoc:
400
- begin
401
- p0 = @scanner.pos
402
- begin
403
- (r0_0 = begin
404
- begin
405
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>fail)(?![[:alnum:]_]))/) &&
406
- @scanner[1]
407
- end ||
408
- begin
409
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>fail_rule)(?![[:alnum:]_]))/) &&
410
- @scanner[1]
411
- end ||
412
- begin
413
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>fail_parse)(?![[:alnum:]_]))/) &&
414
- @scanner[1]
415
- end
416
- end) &&
417
- (r0_1 = begin
418
- begin
419
- p1 = @scanner.pos
420
- begin
421
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\()/) &&
422
- (r1_0 = begin
423
- begin
424
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>")(?>(?>(?>\\)(?>.)|[^"])*)(?>"))/) &&
425
- @scanner[1]
426
- end ||
427
- begin
428
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>')(?>(?>(?>\\)(?>.)|[^'])*)(?>'))/) &&
429
- @scanner[1]
430
- end ||
431
- begin
432
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\()(?>(?>(?>\\)(?>.)|[^)])*)(?>\)))/) &&
433
- @scanner[1]
434
- end ||
435
- begin
436
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\{)(?>(?>(?>\\)(?>.)|[^}])*)(?>\}))/) &&
437
- @scanner[1]
438
- end ||
439
- begin
440
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\[)(?>(?>(?>\\)(?>.)|[^\]])*)(?>\]))/) &&
441
- @scanner[1]
442
- end ||
443
- begin
444
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%<)(?>(?>(?>\\)(?>.)|[^>])*)(?>>))/) &&
445
- @scanner[1]
446
- end ||
447
- begin
448
- p2 = @scanner.pos
449
- begin
450
- @scanner.skip(/(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*/) &&
451
- begin
452
- p3 = @scanner.pos
453
- begin
454
- @scanner.skip(/%/) &&
455
- (r3_0 = @scanner.scan(/[[:punct:]]/)) &&
456
- begin
457
- while begin
458
- @scanner.skip(/(?>\\)(?>.)/) ||
459
- begin
460
- p4 = @scanner.pos
461
- begin
462
- @scanner.skip(/(?!#{r3_0})/) &&
463
- @scanner.skip(/./) &&
464
- true
465
- end || begin
466
- @scanner.pos = p4
467
- false
468
- end
469
- end
470
- end; end
471
- true
472
- end &&
473
- @scanner.skip(/#{r3_0}/) &&
474
- @scanner.string[p3...(@scanner.pos)]
475
- end || begin
476
- @scanner.pos = p3
477
- false
478
- end
479
- end
480
- end || begin
481
- @scanner.pos = p2
482
- false
483
- end
484
- end
485
- end) &&
486
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\))/) &&
487
- r1_0
488
- end || begin
489
- @scanner.pos = p1
490
- false
491
- end
492
- end ||
493
- begin
494
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>")(?>(?>(?>\\)(?>.)|[^"])*)(?>"))/) &&
495
- @scanner[1]
496
- end ||
497
- begin
498
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>')(?>(?>(?>\\)(?>.)|[^'])*)(?>'))/) &&
499
- @scanner[1]
500
- end ||
501
- begin
502
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\()(?>(?>(?>\\)(?>.)|[^)])*)(?>\)))/) &&
503
- @scanner[1]
504
- end ||
505
- begin
506
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\{)(?>(?>(?>\\)(?>.)|[^}])*)(?>\}))/) &&
507
- @scanner[1]
508
- end ||
509
- begin
510
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\[)(?>(?>(?>\\)(?>.)|[^\]])*)(?>\]))/) &&
511
- @scanner[1]
512
- end ||
513
- begin
514
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%<)(?>(?>(?>\\)(?>.)|[^>])*)(?>>))/) &&
515
- @scanner[1]
516
- end ||
517
- begin
518
- p1 = @scanner.pos
519
- begin
520
- @scanner.skip(/(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*/) &&
521
- begin
522
- p2 = @scanner.pos
523
- begin
524
- @scanner.skip(/%/) &&
525
- (r2_0 = @scanner.scan(/[[:punct:]]/)) &&
526
- begin
527
- while begin
528
- @scanner.skip(/(?>\\)(?>.)/) ||
529
- begin
530
- p3 = @scanner.pos
531
- begin
532
- @scanner.skip(/(?!#{r2_0})/) &&
533
- @scanner.skip(/./) &&
534
- true
535
- end || begin
536
- @scanner.pos = p3
537
- false
538
- end
539
- end
540
- end; end
541
- true
542
- end &&
543
- @scanner.skip(/#{r2_0}/) &&
544
- @scanner.string[p2...(@scanner.pos)]
545
- end || begin
546
- @scanner.pos = p2
547
- false
548
- end
549
- end
550
- end || begin
551
- @scanner.pos = p1
552
- false
553
- end
554
- end
555
- end) &&
556
- Fail.parsed([r0_0, r0_1])
557
- end || begin
558
- @scanner.pos = p0
559
- false
560
- end
561
- end ||
562
- match(:labeled) ||
563
- match(:labelable)
564
- end
565
-
566
- # @private
567
- def match_labeled #:nodoc:
568
- memoize :match_labeled!
569
- end
570
-
571
- # @private
572
- def match_labeled! #:nodoc:
573
- p0 = @scanner.pos
574
- begin
575
- (r0_0 = begin
576
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:lower:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>:))/) &&
577
- @scanner[1]
578
- end) &&
579
- (r0_1 = match(:labelable)) &&
580
- Label.parsed(select_captures([r0_0, r0_1]))
581
- end || begin
582
- @scanner.pos = p0
583
- false
584
- end
585
- end
586
-
587
- # @private
588
- def match_labelable #:nodoc:
589
- memoize :match_labelable!
590
- end
591
-
592
- # @private
593
- def match_labelable! #:nodoc:
594
- match(:list) ||
595
- match(:list_term)
596
- end
597
-
598
- # @private
599
- def match_list #:nodoc:
600
- memoize :match_list!
601
- end
602
-
603
- # @private
604
- def match_list! #:nodoc:
605
- begin
606
- p0 = @scanner.pos
607
- begin
608
- (r0_0 = match(:list_term)) &&
609
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
610
- (r0_1 = match(:list_term)) &&
611
- (list0 r0_0, r0_1)
612
- end || begin
613
- @scanner.pos = p0
614
- false
615
- end
616
- end ||
617
- begin
618
- p0 = @scanner.pos
619
- begin
620
- (r0_0 = match(:list_term)) &&
621
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\+))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
622
- (r0_1 = match(:list_term)) &&
623
- (list1 r0_0, r0_1)
624
- end || begin
625
- @scanner.pos = p0
626
- false
627
- end
628
- end ||
629
- begin
630
- p0 = @scanner.pos
631
- begin
632
- (r0_0 = match(:list_term)) &&
633
- (r0_1 = begin
634
- begin
635
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\.\.))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+))/) &&
636
- ([@scanner[1], @scanner[2]].map {|s| s.to_i })
637
- end ||
638
- begin
639
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\.\.))/) &&
640
- ([@scanner[1].to_i, nil])
641
- end ||
642
- begin
643
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+)/) &&
644
- ([@scanner[1].to_i] * 2)
645
- end
646
- end) &&
647
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,)/) &&
648
- (r0_2 = match(:list_term)) &&
649
- ListParser.parsed(select_captures([r0_0, r0_1, r0_2]))
650
- end || begin
651
- @scanner.pos = p0
652
- false
653
- end
654
- end
655
- end
656
-
657
- # @private
658
- def match_list_term #:nodoc:
659
- memoize :match_list_term!
660
- end
661
-
662
- # @private
663
- def match_list_term! #:nodoc:
664
- match(:prefixed) ||
665
- match(:prefixable) ||
666
- (fail! { "term expected" })
667
- end
668
-
669
- # @private
670
- def match_prefixed #:nodoc:
671
- memoize :match_prefixed!
672
- end
673
-
674
- # @private
675
- def match_prefixed! #:nodoc:
676
- begin
677
- p0 = @scanner.pos
678
- begin
679
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>&)/) &&
680
- (r0_0 = match(:prefixable)) &&
681
- Assert.parsed(select_captures([r0_0]))
682
- end || begin
683
- @scanner.pos = p0
684
- false
685
- end
686
- end ||
687
- begin
688
- p0 = @scanner.pos
689
- begin
690
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>!)/) &&
691
- (r0_0 = match(:prefixable)) &&
692
- Disallow.parsed(select_captures([r0_0]))
693
- end || begin
694
- @scanner.pos = p0
695
- false
696
- end
697
- end ||
698
- begin
699
- p0 = @scanner.pos
700
- begin
701
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>~)/) &&
702
- (r0_0 = match(:prefixable)) &&
703
- Skip.parsed(select_captures([r0_0]))
704
- end || begin
705
- @scanner.pos = p0
706
- false
707
- end
708
- end ||
709
- begin
710
- p0 = @scanner.pos
711
- begin
712
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>@)/) &&
713
- (r0_0 = match(:prefixable)) &&
714
- Token.parsed(select_captures([r0_0]))
715
- end || begin
716
- @scanner.pos = p0
717
- false
718
- end
719
- end
720
- end
721
-
722
- # @private
723
- def match_prefixable #:nodoc:
724
- memoize :match_prefixable!
725
- end
726
-
727
- # @private
728
- def match_prefixable! #:nodoc:
729
- match(:suffixed) ||
730
- match(:primary)
731
- end
732
-
733
- # @private
734
- def match_suffixed #:nodoc:
735
- memoize :match_suffixed!
736
- end
737
-
738
- # @private
739
- def match_suffixed! #:nodoc:
740
- begin
741
- p0 = @scanner.pos
742
- begin
743
- (r0_0 = match(:primary)) &&
744
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\?)/) &&
745
- (optional r0_0)
746
- end || begin
747
- @scanner.pos = p0
748
- false
749
- end
750
- end ||
751
- begin
752
- p0 = @scanner.pos
753
- begin
754
- (r0_0 = match(:primary)) &&
755
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\*))(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
756
- (zero_or_more r0_0)
757
- end || begin
758
- @scanner.pos = p0
759
- false
760
- end
761
- end ||
762
- begin
763
- p0 = @scanner.pos
764
- begin
765
- (r0_0 = match(:primary)) &&
766
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\+))(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
767
- (one_or_more r0_0)
768
- end || begin
769
- @scanner.pos = p0
770
- false
771
- end
772
- end ||
773
- begin
774
- p0 = @scanner.pos
775
- begin
776
- (r0_0 = match(:primary)) &&
777
- (r0_1 = begin
778
- begin
779
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\.\.))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+))/) &&
780
- ([@scanner[1], @scanner[2]].map {|s| s.to_i })
781
- end ||
782
- begin
783
- @scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\.\.))/) &&
784
- ([@scanner[1].to_i, nil])
785
- end ||
786
- begin
787
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:digit:]])+)/) &&
788
- ([@scanner[1].to_i] * 2)
789
- end
790
- end) &&
791
- @scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
792
- Repeat.parsed(select_captures([r0_0, r0_1]))
793
- end || begin
794
- @scanner.pos = p0
795
- false
796
- end
797
- end
798
- end
799
-
800
- # @private
801
- def match_primary #:nodoc:
802
- memoize :match_primary!
803
- end
804
-
805
- # @private
806
- def match_primary! #:nodoc:
807
- begin
808
- p0 = @scanner.pos
809
- begin
810
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\()/) &&
811
- (r0_0 = match(:expression)) &&
812
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\))/) &&
813
- r0_0
814
- end || begin
815
- @scanner.pos = p0
816
- false
817
- end
818
- end ||
819
- begin
820
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>EOF)(?![[:alnum:]_]))/) &&
821
- Eof.parsed([])
822
- end ||
823
- begin
824
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>E)(?![[:alnum:]_]))/) &&
825
- ESymbol.parsed([])
826
- end ||
827
- begin
828
- (r = begin
829
- begin
830
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>ALNUM)(?![[:alnum:]_]))/) &&
831
- @scanner[1]
832
- end ||
833
- begin
834
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>ALPHA)(?![[:alnum:]_]))/) &&
835
- @scanner[1]
836
- end ||
837
- begin
838
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>ASCII)(?![[:alnum:]_]))/) &&
839
- @scanner[1]
840
- end ||
841
- begin
842
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>BLANK)(?![[:alnum:]_]))/) &&
843
- @scanner[1]
844
- end ||
845
- begin
846
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>CNTRL)(?![[:alnum:]_]))/) &&
847
- @scanner[1]
848
- end ||
849
- begin
850
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>DIGIT)(?![[:alnum:]_]))/) &&
851
- @scanner[1]
852
- end ||
853
- begin
854
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>GRAPH)(?![[:alnum:]_]))/) &&
855
- @scanner[1]
856
- end ||
857
- begin
858
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>LOWER)(?![[:alnum:]_]))/) &&
859
- @scanner[1]
860
- end ||
861
- begin
862
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>PRINT)(?![[:alnum:]_]))/) &&
863
- @scanner[1]
864
- end ||
865
- begin
866
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>PUNCT)(?![[:alnum:]_]))/) &&
867
- @scanner[1]
868
- end ||
869
- begin
870
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>SPACE)(?![[:alnum:]_]))/) &&
871
- @scanner[1]
872
- end ||
873
- begin
874
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>UPPER)(?![[:alnum:]_]))/) &&
875
- @scanner[1]
876
- end ||
877
- begin
878
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>XDIGIT)(?![[:alnum:]_]))/) &&
879
- @scanner[1]
880
- end ||
881
- begin
882
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>WORD)(?![[:alnum:]_]))/) &&
883
- @scanner[1]
884
- end ||
885
- (fail! { "posix_class expected" })
886
- end) && (posix_class r)
887
- end ||
888
- begin
889
- p0 = @scanner.pos
890
- begin
891
- @scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>EOF)(?![[:alnum:]_])))/) &&
892
- (r0_0 = begin
893
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:alpha:]])(?>(?>[[:alnum:]_])*))/) &&
894
- @scanner[1]
895
- end) &&
896
- @scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><\-))/) &&
897
- Apply.parsed([r0_0])
898
- end || begin
899
- @scanner.pos = p0
900
- false
901
- end
902
- end ||
903
- begin
904
- (r = begin
905
- begin
906
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>")(?>(?>(?>\\)(?>.)|[^"])*)(?>"))/) &&
907
- @scanner[1]
908
- end ||
909
- begin
910
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>')(?>(?>(?>\\)(?>.)|[^'])*)(?>'))/) &&
911
- @scanner[1]
912
- end ||
913
- begin
914
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\()(?>(?>(?>\\)(?>.)|[^)])*)(?>\)))/) &&
915
- @scanner[1]
916
- end ||
917
- begin
918
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\{)(?>(?>(?>\\)(?>.)|[^}])*)(?>\}))/) &&
919
- @scanner[1]
920
- end ||
921
- begin
922
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%\[)(?>(?>(?>\\)(?>.)|[^\]])*)(?>\]))/) &&
923
- @scanner[1]
924
- end ||
925
- begin
926
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>%<)(?>(?>(?>\\)(?>.)|[^>])*)(?>>))/) &&
927
- @scanner[1]
928
- end ||
929
- begin
930
- p0 = @scanner.pos
931
- begin
932
- @scanner.skip(/(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*/) &&
933
- begin
934
- p1 = @scanner.pos
935
- begin
936
- @scanner.skip(/%/) &&
937
- (r1_0 = @scanner.scan(/[[:punct:]]/)) &&
938
- begin
939
- while begin
940
- @scanner.skip(/(?>\\)(?>.)/) ||
941
- begin
942
- p2 = @scanner.pos
943
- begin
944
- @scanner.skip(/(?!#{r1_0})/) &&
945
- @scanner.skip(/./) &&
946
- true
947
- end || begin
948
- @scanner.pos = p2
949
- false
950
- end
951
- end
952
- end; end
953
- true
954
- end &&
955
- @scanner.skip(/#{r1_0}/) &&
956
- @scanner.string[p1...(@scanner.pos)]
957
- end || begin
958
- @scanner.pos = p1
959
- false
960
- end
961
- end
962
- end || begin
963
- @scanner.pos = p0
964
- false
965
- end
966
- end
967
- end) && (literal r)
968
- end ||
969
- begin
970
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>`)(?>(?>(?>\\)(?>.)|[^`])*)(?>`))/) &&
971
- (word_literal @scanner[1])
972
- end ||
973
- begin
974
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>\[)(?>(?>(?!\])(?>(?>\[:)(?>(?>alnum)(?![[:alnum:]_])|(?>alpha)(?![[:alnum:]_])|(?>ascii)(?![[:alnum:]_])|(?>blank)(?![[:alnum:]_])|(?>cntrl)(?![[:alnum:]_])|(?>digit)(?![[:alnum:]_])|(?>graph)(?![[:alnum:]_])|(?>lower)(?![[:alnum:]_])|(?>print)(?![[:alnum:]_])|(?>punct)(?![[:alnum:]_])|(?>space)(?![[:alnum:]_])|(?>upper)(?![[:alnum:]_])|(?>xdigit)(?![[:alnum:]_]))(?>:\])|(?>(?>\\)(?>[0-3])(?>[0-7])(?>[0-7])|(?>\\x)(?>[[:xdigit:]])(?>[[:xdigit:]])|(?>\\)(?>.)|[^\\\]])(?>(?>(?>\-)(?>(?>\\)(?>[0-3])(?>[0-7])(?>[0-7])|(?>\\x)(?>[[:xdigit:]])(?>[[:xdigit:]])|(?>\\)(?>.)|[^\\\]]))?)))+)(?>\]))/) &&
975
- (char_class @scanner[1])
976
- end ||
977
- begin
978
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>\$)(?>[[:lower:]])(?>(?>[[:alnum:]_])*))/) &&
979
- BackReference.parsed([@scanner[1]])
980
- end ||
981
- begin
982
- @scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\.)/) &&
983
- (Match[/./])
984
- end ||
985
- (fail! { "atom expected" })
986
- end
987
-
988
- end
989
- end
990
- end