rattler 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +9 -3
- data/features/command_line/dest_option.feature +1 -1
- data/features/command_line/lib_option.feature +2 -2
- data/features/command_line/output_option.feature +2 -2
- data/features/command_line/parser_generator.feature +3 -3
- data/features/grammar/any_character.feature +0 -4
- data/features/grammar/back_reference.feature +0 -4
- data/features/grammar/character_class.feature +0 -4
- data/features/grammar/comments.feature +0 -4
- data/features/grammar/e_symbol.feature +18 -0
- data/features/grammar/eof.feature +0 -4
- data/features/grammar/fail.feature +0 -4
- data/features/grammar/list_matching.feature +52 -3
- data/features/grammar/literal.feature +0 -4
- data/features/grammar/negative_lookahead.feature +0 -4
- data/features/grammar/negative_semantic_predicate.feature +99 -0
- data/features/grammar/node_action.feature +17 -4
- data/features/grammar/nonterminal.feature +3 -7
- data/features/grammar/one_or_more.feature +0 -4
- data/features/grammar/optional.feature +0 -4
- data/features/grammar/ordered_choice.feature +0 -4
- data/features/grammar/positive_lookahead.feature +0 -4
- data/features/grammar/positive_semantic_predicate.feature +99 -0
- data/features/grammar/posix_class.feature +3 -6
- data/features/grammar/repeat.feature +50 -0
- data/features/grammar/sequence.feature +0 -4
- data/features/grammar/side_effect.feature +81 -0
- data/features/grammar/skip_operator.feature +2 -5
- data/features/grammar/start_rule.feature +1 -5
- data/features/grammar/symantic_action.feature +9 -4
- data/features/grammar/token.feature +0 -4
- data/features/grammar/whitespace.feature +0 -4
- data/features/grammar/word_literal.feature +0 -4
- data/features/grammar/zero_or_more.feature +0 -4
- data/features/step_definitions/grammar_steps.rb +5 -1
- data/lib/rattler/back_end/optimizer.rb +1 -0
- data/lib/rattler/back_end/optimizer/reduce_repeat_match.rb +20 -8
- data/lib/rattler/back_end/optimizer/simplify_redundant_repeat.rb +10 -7
- data/lib/rattler/back_end/optimizer/specialize_repeat.rb +40 -0
- data/lib/rattler/back_end/parser_generator.rb +11 -6
- data/lib/rattler/back_end/parser_generator/delegating_generator.rb +20 -0
- data/lib/rattler/back_end/parser_generator/e_symbol_generator.rb +52 -0
- data/lib/rattler/back_end/parser_generator/eof_generator.rb +58 -0
- data/lib/rattler/back_end/parser_generator/expr_generator.rb +6 -2
- data/lib/rattler/back_end/parser_generator/gen_method_names.rb +15 -5
- data/lib/rattler/back_end/parser_generator/general_list_generator.rb +194 -0
- data/lib/rattler/back_end/parser_generator/general_repeat_generator.rb +177 -0
- data/lib/rattler/back_end/parser_generator/label_generator.rb +4 -1
- data/lib/rattler/back_end/parser_generator/list0_generating.rb +36 -0
- data/lib/rattler/back_end/parser_generator/list1_generating.rb +30 -0
- data/lib/rattler/back_end/parser_generator/list_generator.rb +16 -20
- data/lib/rattler/back_end/parser_generator/one_or_more_generating.rb +25 -0
- data/lib/rattler/back_end/parser_generator/{optional_generator.rb → optional_generating.rb} +66 -81
- data/lib/rattler/back_end/parser_generator/predicate_propogating.rb +4 -4
- data/lib/rattler/back_end/parser_generator/repeat_generator.rb +53 -0
- data/lib/rattler/back_end/parser_generator/skip_propogating.rb +2 -2
- data/lib/rattler/back_end/parser_generator/sub_generating.rb +16 -18
- data/lib/rattler/back_end/parser_generator/token_propogating.rb +1 -1
- data/lib/rattler/back_end/parser_generator/zero_or_more_generating.rb +31 -0
- data/lib/rattler/grammar/grammar_parser.rb +20 -0
- data/lib/rattler/grammar/metagrammar.rb +131 -13
- data/lib/rattler/grammar/rattler.rtlr +25 -12
- data/lib/rattler/parsers.rb +9 -5
- data/lib/rattler/parsers/assert_code.rb +31 -0
- data/lib/rattler/parsers/atomic.rb +19 -0
- data/lib/rattler/parsers/direct_action.rb +12 -4
- data/lib/rattler/parsers/disallow_code.rb +31 -0
- data/lib/rattler/parsers/dispatch_action.rb +3 -2
- data/lib/rattler/parsers/e_symbol.rb +47 -0
- data/lib/rattler/parsers/effect_code.rb +31 -0
- data/lib/rattler/parsers/eof.rb +6 -13
- data/lib/rattler/parsers/list_parser.rb +33 -14
- data/lib/rattler/parsers/match.rb +1 -6
- data/lib/rattler/parsers/parser_dsl.rb +78 -35
- data/lib/rattler/parsers/predicate.rb +1 -4
- data/lib/rattler/parsers/repeat.rb +76 -0
- data/lib/rattler/parsers/semantic_assert.rb +19 -0
- data/lib/rattler/parsers/semantic_disallow.rb +19 -0
- data/lib/rattler/parsers/side_effect.rb +19 -0
- data/lib/rattler/parsers/skip.rb +1 -9
- data/lib/rattler/parsers/token.rb +1 -6
- data/lib/rattler/util/graphviz/node_builder.rb +6 -3
- data/spec/rattler/back_end/assert_compiler_examples.rb +187 -0
- data/spec/rattler/back_end/direct_action_compiler_examples.rb +227 -0
- data/spec/rattler/back_end/disallow_compiler_examples.rb +187 -0
- data/spec/rattler/back_end/dispatch_action_compiler_examples.rb +225 -0
- data/spec/rattler/back_end/optimizer/reduce_repeat_match_spec.rb +45 -33
- data/spec/rattler/back_end/optimizer/simplify_redundant_repeat_spec.rb +32 -172
- data/spec/rattler/back_end/parser_generator/e_symbol_generator_spec.rb +149 -0
- data/spec/rattler/back_end/parser_generator/eof_generator_spec.rb +152 -0
- data/spec/rattler/back_end/parser_generator/label_generator_spec.rb +4 -4
- data/spec/rattler/back_end/parser_generator/list0_generator_examples.rb +322 -0
- data/spec/rattler/back_end/parser_generator/list1_generator_examples.rb +343 -0
- data/spec/rattler/back_end/parser_generator/list_generator_spec.rb +597 -140
- data/spec/rattler/back_end/parser_generator/one_or_more_generator_examples.rb +292 -0
- data/spec/rattler/back_end/parser_generator/optional_generator_examples.rb +233 -0
- data/spec/rattler/back_end/parser_generator/repeat_generator_spec.rb +281 -0
- data/spec/rattler/back_end/parser_generator/zero_or_more_generator_examples.rb +277 -0
- data/spec/rattler/back_end/semantic_assert_compiler_examples.rb +152 -0
- data/spec/rattler/back_end/semantic_disallow_compiler_examples.rb +152 -0
- data/spec/rattler/back_end/shared_compiler_examples.rb +106 -651
- data/spec/rattler/back_end/side_effect_compiler_examples.rb +227 -0
- data/spec/rattler/back_end/skip_compiler_examples.rb +161 -0
- data/spec/rattler/back_end/token_compiler_examples.rb +262 -0
- data/spec/rattler/grammar/grammar_parser_spec.rb +302 -23
- data/spec/rattler/parsers/apply_spec.rb +6 -0
- data/spec/rattler/parsers/assert_spec.rb +18 -7
- data/spec/rattler/parsers/back_reference_spec.rb +9 -0
- data/spec/rattler/parsers/choice_spec.rb +36 -21
- data/spec/rattler/parsers/direct_action_spec.rb +76 -36
- data/spec/rattler/parsers/disallow_spec.rb +18 -7
- data/spec/rattler/parsers/dispatch_action_spec.rb +128 -22
- data/spec/rattler/parsers/e_symbol_spec.rb +30 -0
- data/spec/rattler/parsers/eof_spec.rb +15 -6
- data/spec/rattler/parsers/label_spec.rb +15 -2
- data/spec/rattler/parsers/list_parser_spec.rb +187 -0
- data/spec/rattler/parsers/match_spec.rb +16 -7
- data/spec/rattler/parsers/parser_dsl_spec.rb +82 -23
- data/spec/rattler/parsers/repeat_spec.rb +233 -0
- data/spec/rattler/parsers/semantic_assert_spec.rb +83 -0
- data/spec/rattler/parsers/semantic_disallow_spec.rb +83 -0
- data/spec/rattler/parsers/sequence_spec.rb +34 -20
- data/spec/rattler/parsers/side_effect_spec.rb +214 -0
- data/spec/rattler/parsers/skip_spec.rb +17 -6
- data/spec/rattler_spec.rb +2 -0
- data/spec/support/compiler_spec_helper.rb +8 -0
- metadata +156 -447
- data/bin/rtlr.compiled.rbc +0 -201
- data/features/step_definitions/cli_steps.rbc +0 -149
- data/features/step_definitions/grammar_steps.rbc +0 -1211
- data/features/support/env.rbc +0 -389
- data/lib/rattler.rbc +0 -1231
- data/lib/rattler/back_end.rbc +0 -286
- data/lib/rattler/back_end/compiler.rbc +0 -1394
- data/lib/rattler/back_end/optimizer.rbc +0 -2000
- data/lib/rattler/back_end/optimizer/composite_reducing.rbc +0 -337
- data/lib/rattler/back_end/optimizer/flatten_choice.rbc +0 -443
- data/lib/rattler/back_end/optimizer/flatten_sequence.rbc +0 -827
- data/lib/rattler/back_end/optimizer/flattening.rbc +0 -570
- data/lib/rattler/back_end/optimizer/inline_regular_rules.rbc +0 -691
- data/lib/rattler/back_end/optimizer/join_match_capturing_sequence.rbc +0 -1299
- data/lib/rattler/back_end/optimizer/join_match_choice.rbc +0 -523
- data/lib/rattler/back_end/optimizer/join_match_matching_sequence.rbc +0 -619
- data/lib/rattler/back_end/optimizer/join_match_sequence.rbc +0 -174
- data/lib/rattler/back_end/optimizer/join_predicate_bare_match.rbc +0 -1505
- data/lib/rattler/back_end/optimizer/join_predicate_match.rbc +0 -174
- data/lib/rattler/back_end/optimizer/join_predicate_nested_match.rbc +0 -620
- data/lib/rattler/back_end/optimizer/join_predicate_or_bare_match.rbc +0 -1502
- data/lib/rattler/back_end/optimizer/join_predicate_or_match.rbc +0 -174
- data/lib/rattler/back_end/optimizer/join_predicate_or_nested_match.rbc +0 -616
- data/lib/rattler/back_end/optimizer/match_joining.rbc +0 -1454
- data/lib/rattler/back_end/optimizer/optimization.rbc +0 -1366
- data/lib/rattler/back_end/optimizer/optimization_context.rbc +0 -1386
- data/lib/rattler/back_end/optimizer/optimization_sequence.rbc +0 -520
- data/lib/rattler/back_end/optimizer/optimize_children.rbc +0 -793
- data/lib/rattler/back_end/optimizer/reduce_repeat_match.rbc +0 -788
- data/lib/rattler/back_end/optimizer/remove_meaningless_wrapper.rbc +0 -508
- data/lib/rattler/back_end/optimizer/simplify_redundant_repeat.rbc +0 -807
- data/lib/rattler/back_end/optimizer/simplify_token_match.rbc +0 -561
- data/lib/rattler/back_end/parser_generator.rbc +0 -1326
- data/lib/rattler/back_end/parser_generator/apply_generator.rbc +0 -2148
- data/lib/rattler/back_end/parser_generator/assert_generator.rbc +0 -1967
- data/lib/rattler/back_end/parser_generator/back_reference_generator.rbc +0 -1665
- data/lib/rattler/back_end/parser_generator/choice_generator.rbc +0 -2793
- data/lib/rattler/back_end/parser_generator/direct_action_generator.rbc +0 -1071
- data/lib/rattler/back_end/parser_generator/disallow_generator.rbc +0 -1967
- data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rbc +0 -1071
- data/lib/rattler/back_end/parser_generator/expr_generator.rbc +0 -2295
- data/lib/rattler/back_end/parser_generator/fail_generator.rbc +0 -1216
- data/lib/rattler/back_end/parser_generator/gen_method_names.rbc +0 -296
- data/lib/rattler/back_end/parser_generator/group_match.rbc +0 -612
- data/lib/rattler/back_end/parser_generator/group_match_generator.rbc +0 -1647
- data/lib/rattler/back_end/parser_generator/label_generator.rbc +0 -1401
- data/lib/rattler/back_end/parser_generator/list1_generator.rb +0 -54
- data/lib/rattler/back_end/parser_generator/list1_generator.rbc +0 -1237
- data/lib/rattler/back_end/parser_generator/list_generating.rb +0 -71
- data/lib/rattler/back_end/parser_generator/list_generating.rbc +0 -1900
- data/lib/rattler/back_end/parser_generator/list_generator.rbc +0 -1068
- data/lib/rattler/back_end/parser_generator/match_generator.rbc +0 -1743
- data/lib/rattler/back_end/parser_generator/nested.rbc +0 -496
- data/lib/rattler/back_end/parser_generator/one_or_more_generator.rb +0 -56
- data/lib/rattler/back_end/parser_generator/one_or_more_generator.rbc +0 -1277
- data/lib/rattler/back_end/parser_generator/optional_generator.rbc +0 -2025
- data/lib/rattler/back_end/parser_generator/predicate_propogating.rbc +0 -648
- data/lib/rattler/back_end/parser_generator/repeat_generating.rb +0 -57
- data/lib/rattler/back_end/parser_generator/repeat_generating.rbc +0 -1549
- data/lib/rattler/back_end/parser_generator/rule_generator.rbc +0 -1239
- data/lib/rattler/back_end/parser_generator/rule_set_generator.rbc +0 -2641
- data/lib/rattler/back_end/parser_generator/sequence_generator.rbc +0 -4867
- data/lib/rattler/back_end/parser_generator/skip_generator.rbc +0 -1278
- data/lib/rattler/back_end/parser_generator/skip_propogating.rbc +0 -432
- data/lib/rattler/back_end/parser_generator/sub_generating.rbc +0 -2785
- data/lib/rattler/back_end/parser_generator/token_generator.rbc +0 -755
- data/lib/rattler/back_end/parser_generator/token_propogating.rbc +0 -324
- data/lib/rattler/back_end/parser_generator/top_level.rbc +0 -352
- data/lib/rattler/back_end/parser_generator/zero_or_more_generator.rb +0 -53
- data/lib/rattler/back_end/parser_generator/zero_or_more_generator.rbc +0 -1111
- data/lib/rattler/back_end/ruby_generator.rbc +0 -1841
- data/lib/rattler/grammar.rbc +0 -557
- data/lib/rattler/grammar/analysis.rbc +0 -1944
- data/lib/rattler/grammar/grammar.rbc +0 -1090
- data/lib/rattler/grammar/grammar_dsl.rbc +0 -1401
- data/lib/rattler/grammar/grammar_parser.rbc +0 -2096
- data/lib/rattler/grammar/metagrammar.rbc +0 -11014
- data/lib/rattler/parsers.rbc +0 -1006
- data/lib/rattler/parsers/action_code.rbc +0 -1577
- data/lib/rattler/parsers/apply.rbc +0 -562
- data/lib/rattler/parsers/assert.rbc +0 -378
- data/lib/rattler/parsers/back_reference.rbc +0 -871
- data/lib/rattler/parsers/choice.rbc +0 -607
- data/lib/rattler/parsers/combinator_parser.rbc +0 -612
- data/lib/rattler/parsers/combining.rbc +0 -570
- data/lib/rattler/parsers/direct_action.rbc +0 -1472
- data/lib/rattler/parsers/disallow.rbc +0 -379
- data/lib/rattler/parsers/dispatch_action.rbc +0 -2078
- data/lib/rattler/parsers/eof.rbc +0 -567
- data/lib/rattler/parsers/fail.rbc +0 -745
- data/lib/rattler/parsers/label.rbc +0 -749
- data/lib/rattler/parsers/list.rbc +0 -292
- data/lib/rattler/parsers/list0.rb +0 -26
- data/lib/rattler/parsers/list0.rbc +0 -292
- data/lib/rattler/parsers/list1.rb +0 -26
- data/lib/rattler/parsers/list1.rbc +0 -305
- data/lib/rattler/parsers/list_parser.rbc +0 -886
- data/lib/rattler/parsers/match.rbc +0 -621
- data/lib/rattler/parsers/node_code.rbc +0 -1064
- data/lib/rattler/parsers/one_or_more.rb +0 -47
- data/lib/rattler/parsers/one_or_more.rbc +0 -475
- data/lib/rattler/parsers/optional.rb +0 -42
- data/lib/rattler/parsers/optional.rbc +0 -450
- data/lib/rattler/parsers/parser.rbc +0 -994
- data/lib/rattler/parsers/parser_dsl.rbc +0 -4765
- data/lib/rattler/parsers/predicate.rbc +0 -490
- data/lib/rattler/parsers/rule.rbc +0 -777
- data/lib/rattler/parsers/rule_set.rbc +0 -1438
- data/lib/rattler/parsers/sequence.rbc +0 -1040
- data/lib/rattler/parsers/skip.rbc +0 -613
- data/lib/rattler/parsers/token.rbc +0 -457
- data/lib/rattler/parsers/zero_or_more.rb +0 -40
- data/lib/rattler/parsers/zero_or_more.rbc +0 -462
- data/lib/rattler/runner.rbc +0 -3813
- data/lib/rattler/runtime.rbc +0 -370
- data/lib/rattler/runtime/extended_packrat_parser.rbc +0 -2351
- data/lib/rattler/runtime/packrat_parser.rbc +0 -1390
- data/lib/rattler/runtime/parse_failure.rbc +0 -909
- data/lib/rattler/runtime/parse_node.rbc +0 -1007
- data/lib/rattler/runtime/parser.rbc +0 -2267
- data/lib/rattler/runtime/parser_helper.rbc +0 -337
- data/lib/rattler/runtime/recursive_descent_parser.rbc +0 -942
- data/lib/rattler/util.rbc +0 -286
- data/lib/rattler/util/graphviz.rbc +0 -327
- data/lib/rattler/util/graphviz/node_builder.rbc +0 -2207
- data/lib/rattler/util/line_counter.rbc +0 -988
- data/lib/rattler/util/node.rbc +0 -2393
- data/lib/rattler/util/parser_spec_helper.rbc +0 -2533
- data/spec/rattler/back_end/compiler_spec.rbc +0 -1187
- data/spec/rattler/back_end/optimizer/flatten_choice_spec.rbc +0 -2093
- data/spec/rattler/back_end/optimizer/flatten_sequence_spec.rbc +0 -4055
- data/spec/rattler/back_end/optimizer/inline_regular_rules_spec.rbc +0 -2345
- data/spec/rattler/back_end/optimizer/join_match_capturing_sequence_spec.rbc +0 -7006
- data/spec/rattler/back_end/optimizer/join_match_choice_spec.rbc +0 -3252
- data/spec/rattler/back_end/optimizer/join_match_matching_sequence_spec.rbc +0 -3681
- data/spec/rattler/back_end/optimizer/join_predicate_bare_match_spec.rbc +0 -5603
- data/spec/rattler/back_end/optimizer/join_predicate_nested_match_spec.rbc +0 -5232
- data/spec/rattler/back_end/optimizer/join_predicate_or_bare_match_spec.rbc +0 -4272
- data/spec/rattler/back_end/optimizer/join_predicate_or_nested_match_spec.rbc +0 -4342
- data/spec/rattler/back_end/optimizer/reduce_repeat_match_spec.rbc +0 -2960
- data/spec/rattler/back_end/optimizer/simplify_redundant_repeat_spec.rbc +0 -6929
- data/spec/rattler/back_end/optimizer/simplify_token_match_spec.rbc +0 -2327
- data/spec/rattler/back_end/optimizer_spec.rbc +0 -372
- data/spec/rattler/back_end/parser_generator/apply_generator_spec.rbc +0 -4710
- data/spec/rattler/back_end/parser_generator/assert_generator_spec.rbc +0 -4697
- data/spec/rattler/back_end/parser_generator/back_reference_generator_spec.rbc +0 -4855
- data/spec/rattler/back_end/parser_generator/choice_generator_spec.rbc +0 -5350
- data/spec/rattler/back_end/parser_generator/direct_action_generator_spec.rbc +0 -4737
- data/spec/rattler/back_end/parser_generator/disallow_generator_spec.rbc +0 -4697
- data/spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rbc +0 -4731
- data/spec/rattler/back_end/parser_generator/fail_generator_spec.rbc +0 -2115
- data/spec/rattler/back_end/parser_generator/group_match_generator_spec.rbc +0 -4195
- data/spec/rattler/back_end/parser_generator/group_match_spec.rbc +0 -1414
- data/spec/rattler/back_end/parser_generator/label_generator_spec.rbc +0 -4696
- data/spec/rattler/back_end/parser_generator/list1_generator_spec.rb +0 -309
- data/spec/rattler/back_end/parser_generator/list1_generator_spec.rbc +0 -5213
- data/spec/rattler/back_end/parser_generator/list_generator_spec.rbc +0 -5179
- data/spec/rattler/back_end/parser_generator/match_generator_spec.rbc +0 -4681
- data/spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rb +0 -259
- data/spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rbc +0 -4957
- data/spec/rattler/back_end/parser_generator/optional_generator_spec.rb +0 -190
- data/spec/rattler/back_end/parser_generator/optional_generator_spec.rbc +0 -4704
- data/spec/rattler/back_end/parser_generator/rule_generator_spec.rbc +0 -545
- data/spec/rattler/back_end/parser_generator/rule_set_generator_spec.rbc +0 -1110
- data/spec/rattler/back_end/parser_generator/sequence_generator_spec.rbc +0 -5453
- data/spec/rattler/back_end/parser_generator/skip_generator_spec.rbc +0 -4691
- data/spec/rattler/back_end/parser_generator/token_generator_spec.rbc +0 -4691
- data/spec/rattler/back_end/parser_generator/zero_or_more_generator_spec.rb +0 -244
- data/spec/rattler/back_end/parser_generator/zero_or_more_generator_spec.rbc +0 -4924
- data/spec/rattler/back_end/ruby_generator_spec.rbc +0 -2460
- data/spec/rattler/back_end/shared_compiler_examples.rbc +0 -41886
- data/spec/rattler/grammar/analysis_spec.rbc +0 -4365
- data/spec/rattler/grammar/grammar_parser_spec.rbc +0 -10344
- data/spec/rattler/grammar/grammar_spec.rbc +0 -1701
- data/spec/rattler/parsers/action_code_spec.rbc +0 -4674
- data/spec/rattler/parsers/apply_spec.rbc +0 -851
- data/spec/rattler/parsers/assert_spec.rbc +0 -752
- data/spec/rattler/parsers/back_reference_spec.rbc +0 -1002
- data/spec/rattler/parsers/choice_spec.rbc +0 -1696
- data/spec/rattler/parsers/combinator_parser_spec.rbc +0 -361
- data/spec/rattler/parsers/direct_action_spec.rbc +0 -5222
- data/spec/rattler/parsers/disallow_spec.rbc +0 -752
- data/spec/rattler/parsers/dispatch_action_spec.rbc +0 -3033
- data/spec/rattler/parsers/eof_spec.rbc +0 -728
- data/spec/rattler/parsers/fail_spec.rbc +0 -548
- data/spec/rattler/parsers/label_spec.rbc +0 -1091
- data/spec/rattler/parsers/list0_spec.rb +0 -82
- data/spec/rattler/parsers/list0_spec.rbc +0 -2308
- data/spec/rattler/parsers/list1_spec.rb +0 -82
- data/spec/rattler/parsers/list1_spec.rbc +0 -2287
- data/spec/rattler/parsers/list_spec.rbc +0 -2308
- data/spec/rattler/parsers/match_spec.rbc +0 -780
- data/spec/rattler/parsers/node_code_spec.rbc +0 -1754
- data/spec/rattler/parsers/one_or_more_spec.rb +0 -64
- data/spec/rattler/parsers/one_or_more_spec.rbc +0 -1698
- data/spec/rattler/parsers/optional_spec.rb +0 -64
- data/spec/rattler/parsers/optional_spec.rbc +0 -1717
- data/spec/rattler/parsers/parser_dsl_spec.rbc +0 -10150
- data/spec/rattler/parsers/rule_set_spec.rbc +0 -1060
- data/spec/rattler/parsers/sequence_spec.rbc +0 -2899
- data/spec/rattler/parsers/skip_spec.rbc +0 -753
- data/spec/rattler/parsers/token_spec.rbc +0 -1511
- data/spec/rattler/parsers/zero_or_more_spec.rb +0 -64
- data/spec/rattler/parsers/zero_or_more_spec.rbc +0 -1719
- data/spec/rattler/runtime/extended_packrat_parser_spec.rbc +0 -1341
- data/spec/rattler/runtime/packrat_parser_spec.rbc +0 -210
- data/spec/rattler/runtime/parse_failure_spec.rbc +0 -2244
- data/spec/rattler/runtime/parse_node_spec.rbc +0 -2008
- data/spec/rattler/runtime/parser_spec.rbc +0 -2757
- data/spec/rattler/runtime/recursive_descent_parser_spec.rbc +0 -210
- data/spec/rattler/runtime/shared_parser_examples.rbc +0 -2567
- data/spec/rattler/util/graphviz/node_builder_spec.rbc +0 -3439
- data/spec/rattler/util/line_counter_spec.rbc +0 -2272
- data/spec/rattler/util/node_spec.rbc +0 -15023
- data/spec/rattler_spec.rbc +0 -1591
- data/spec/spec_helper.rbc +0 -336
- data/spec/support/combinator_parser_spec_helper.rbc +0 -1284
- data/spec/support/compiler_spec_helper.rbc +0 -1941
- data/spec/support/parser_generator_spec_helper.rbc +0 -718
- data/spec/support/runtime_parser_spec_helper.rbc +0 -313
@@ -5,19 +5,19 @@ module Rattler::BackEnd::ParserGenerator
|
|
5
5
|
module PredicatePropogating #:nodoc:
|
6
6
|
|
7
7
|
def gen_assert(parser, scope={})
|
8
|
-
|
8
|
+
propogate_gen parser.child, :assert, scope
|
9
9
|
end
|
10
10
|
|
11
11
|
def gen_disallow(parser, scope={})
|
12
|
-
|
12
|
+
propogate_gen parser.child, :disallow, scope
|
13
13
|
end
|
14
14
|
|
15
15
|
def gen_intermediate_assert(parser, scope={})
|
16
|
-
|
16
|
+
propogate_gen parser.child, :intermediate_assert, scope
|
17
17
|
end
|
18
18
|
|
19
19
|
def gen_intermediate_disallow(parser, scope={})
|
20
|
-
|
20
|
+
propogate_gen parser.child, :intermediate_disallow, scope
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rattler/back_end/parser_generator'
|
2
|
+
|
3
|
+
module Rattler::BackEnd::ParserGenerator
|
4
|
+
|
5
|
+
# @private
|
6
|
+
class RepeatGenerator < DelegatingGenerator #:nodoc:
|
7
|
+
include NestedSubGenerating
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def impl(repeat, init_args)
|
12
|
+
generator = default_impl(repeat, init_args)
|
13
|
+
specialize_for repeat, generator
|
14
|
+
generator
|
15
|
+
end
|
16
|
+
|
17
|
+
def specialize_for(repeat, generator)
|
18
|
+
return unless repeat.respond_to? :lower_bound
|
19
|
+
if repeat.lower_bound == 0
|
20
|
+
if repeat.upper_bound == 1
|
21
|
+
generator.extend OptionalGenerating
|
22
|
+
else
|
23
|
+
generator.extend ZeroOrMoreGenerating
|
24
|
+
end
|
25
|
+
elsif repeat.lower_bound == 1
|
26
|
+
generator.extend OneOrMoreGenerating
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# @private
|
32
|
+
class NestedRepeatGenerator < RepeatGenerator #:nodoc:
|
33
|
+
def default_impl(list, init_args)
|
34
|
+
GeneralRepeatGenerator.nested(*init_args)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def RepeatGenerator.nested(*args)
|
39
|
+
NestedRepeatGenerator.new(*args)
|
40
|
+
end
|
41
|
+
|
42
|
+
# @private
|
43
|
+
class TopLevelRepeatGenerator < RepeatGenerator #:nodoc:
|
44
|
+
def default_impl(list, init_args)
|
45
|
+
GeneralRepeatGenerator.top_level(*init_args)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def RepeatGenerator.top_level(*args)
|
50
|
+
TopLevelRepeatGenerator.new(*args)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -5,11 +5,11 @@ module Rattler::BackEnd::ParserGenerator
|
|
5
5
|
module SkipPropogating #:nodoc:
|
6
6
|
|
7
7
|
def gen_skip(parser, scope={})
|
8
|
-
|
8
|
+
propogate_gen parser.child, :skip, scope
|
9
9
|
end
|
10
10
|
|
11
11
|
def gen_intermediate_skip(parser, scope={})
|
12
|
-
|
12
|
+
propogate_gen parser.child, :intermediate_skip, scope
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
@@ -21,17 +21,18 @@ module Rattler::BackEnd::ParserGenerator
|
|
21
21
|
gen_with generator(parser, :top_level), parser, as, *args
|
22
22
|
end
|
23
23
|
|
24
|
-
def
|
25
|
-
|
24
|
+
def propogate_gen(parser, type, scope)
|
25
|
+
if nested?
|
26
|
+
gen_nested parser, type, scope
|
27
|
+
else
|
28
|
+
gen_top_level parser, type, scope
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
private
|
29
33
|
|
30
34
|
def gen_with(g, parser, as=:basic, *args)
|
31
|
-
|
32
|
-
when Eof then gen_eof
|
33
|
-
else g.send(:"gen_#{as}", parser, *args)
|
34
|
-
end
|
35
|
+
g.send(:"gen_#{as}", parser, *args)
|
35
36
|
end
|
36
37
|
|
37
38
|
def generator(parser, context=nil)
|
@@ -48,21 +49,12 @@ module Rattler::BackEnd::ParserGenerator
|
|
48
49
|
when Sequence
|
49
50
|
new_generator SequenceGenerator, context, :new_sequence_level => true
|
50
51
|
|
51
|
-
when
|
52
|
-
cache_generator
|
53
|
-
|
54
|
-
when ZeroOrMore
|
55
|
-
cache_generator ZeroOrMoreGenerator, context, :new_repeat_level => true
|
52
|
+
when Repeat
|
53
|
+
cache_generator RepeatGenerator, context, :new_repeat_level => true
|
56
54
|
|
57
|
-
when
|
58
|
-
cache_generator OneOrMoreGenerator, context, :new_repeat_level => true
|
59
|
-
|
60
|
-
when List0
|
55
|
+
when ListParser
|
61
56
|
cache_generator ListGenerator, context, :new_repeat_level => true
|
62
57
|
|
63
|
-
when List1
|
64
|
-
cache_generator List1Generator, context, :new_repeat_level => true
|
65
|
-
|
66
58
|
when Apply
|
67
59
|
cache_generator ApplyGenerator, context
|
68
60
|
|
@@ -72,6 +64,12 @@ module Rattler::BackEnd::ParserGenerator
|
|
72
64
|
when Disallow
|
73
65
|
cache_generator DisallowGenerator, context
|
74
66
|
|
67
|
+
when Eof
|
68
|
+
cache_generator EofGenerator, context
|
69
|
+
|
70
|
+
when ESymbol
|
71
|
+
cache_generator ESymbolGenerator, context
|
72
|
+
|
75
73
|
when DispatchAction
|
76
74
|
cache_generator DispatchActionGenerator, context
|
77
75
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rattler/back_end/parser_generator'
|
2
|
+
|
3
|
+
module Rattler::BackEnd::ParserGenerator
|
4
|
+
# @private
|
5
|
+
module ZeroOrMoreGenerating #:nodoc:
|
6
|
+
|
7
|
+
def gen_assert(zero_or_more, scope={})
|
8
|
+
@g << 'true'
|
9
|
+
end
|
10
|
+
|
11
|
+
def gen_disallow(zero_or_more, scope={})
|
12
|
+
@g << 'false'
|
13
|
+
end
|
14
|
+
|
15
|
+
def gen_skip(zero_or_more, scope={})
|
16
|
+
expr :block do
|
17
|
+
@g << 'while '
|
18
|
+
generate zero_or_more.child, :intermediate_skip, scope
|
19
|
+
(@g << '; end').newline
|
20
|
+
@g << 'true'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def gen_result(zero_or_more, captures)
|
27
|
+
@g << captures
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -71,6 +71,26 @@ module Rattler::Grammar
|
|
71
71
|
{:parser_name => name, :base_name => base.first}
|
72
72
|
end
|
73
73
|
|
74
|
+
def list0(term_parser, sep_parser)
|
75
|
+
ListParser[term_parser, sep_parser, 0, nil]
|
76
|
+
end
|
77
|
+
|
78
|
+
def list1(term_parser, sep_parser)
|
79
|
+
ListParser[term_parser, sep_parser, 1, nil]
|
80
|
+
end
|
81
|
+
|
82
|
+
def optional(parser)
|
83
|
+
Repeat[parser, 0, 1]
|
84
|
+
end
|
85
|
+
|
86
|
+
def zero_or_more(parser)
|
87
|
+
Repeat[parser, 0, nil]
|
88
|
+
end
|
89
|
+
|
90
|
+
def one_or_more(parser)
|
91
|
+
Repeat[parser, 1, nil]
|
92
|
+
end
|
93
|
+
|
74
94
|
def rule(name, parser)
|
75
95
|
Rule[name, (@ws ? parser.with_ws(@ws) : parser), {:inline => @inline}]
|
76
96
|
end
|
@@ -131,7 +131,7 @@ module Rattler
|
|
131
131
|
begin
|
132
132
|
@scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>EOF)(?![[:alnum:]_])))/) &&
|
133
133
|
(r1_0 = begin
|
134
|
-
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:alnum:]_])
|
134
|
+
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:alpha:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><\-))/) &&
|
135
135
|
@scanner[1]
|
136
136
|
end) &&
|
137
137
|
(r1_1 = match(:expression)) &&
|
@@ -212,7 +212,7 @@ module Rattler
|
|
212
212
|
begin
|
213
213
|
p0 = @scanner.pos
|
214
214
|
begin
|
215
|
-
(r0_0 = match(:attributed)) &&
|
215
|
+
(r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
|
216
216
|
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><)/) &&
|
217
217
|
(r0_1 = ((r = begin
|
218
218
|
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>[[:lower:]])(?>(?>[[:alnum:]_])*))|(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>(?>(?>[[:upper:]])(?>(?>[[:alnum:]_])*)(?>::))*)(?>[[:upper:]])(?>(?>[[:alnum:]_])*)))(?>(?>(?>\.)(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>[[:lower:]])(?>(?>[[:alnum:]_])*))))?))/) &&
|
@@ -283,7 +283,7 @@ module Rattler
|
|
283
283
|
end
|
284
284
|
end) ? [r] : [])) &&
|
285
285
|
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>>)/) &&
|
286
|
-
DispatchAction.parsed(
|
286
|
+
DispatchAction.parsed([r0_0, r0_1, r0_2])
|
287
287
|
end || begin
|
288
288
|
@scanner.pos = p0
|
289
289
|
false
|
@@ -292,12 +292,75 @@ module Rattler
|
|
292
292
|
begin
|
293
293
|
p0 = @scanner.pos
|
294
294
|
begin
|
295
|
-
(r0_0 = match(:attributed)) &&
|
295
|
+
(r0_0 = ((r = match(:attributed)) ? [r] : [])) &&
|
296
296
|
(r0_1 = begin
|
297
297
|
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\{))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>(?>\{)(?>(?>[^}])*)(?>\})|[^{}])*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\}))/) &&
|
298
298
|
@scanner[1]
|
299
299
|
end) &&
|
300
|
-
DirectAction.parsed(
|
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]))
|
301
364
|
end || begin
|
302
365
|
@scanner.pos = p0
|
303
366
|
false
|
@@ -543,9 +606,9 @@ module Rattler
|
|
543
606
|
p0 = @scanner.pos
|
544
607
|
begin
|
545
608
|
(r0_0 = match(:list_term)) &&
|
546
|
-
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(
|
609
|
+
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\*))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
|
547
610
|
(r0_1 = match(:list_term)) &&
|
548
|
-
|
611
|
+
(list0 r0_0, r0_1)
|
549
612
|
end || begin
|
550
613
|
@scanner.pos = p0
|
551
614
|
false
|
@@ -555,9 +618,35 @@ module Rattler
|
|
555
618
|
p0 = @scanner.pos
|
556
619
|
begin
|
557
620
|
(r0_0 = match(:list_term)) &&
|
558
|
-
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(
|
621
|
+
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\+))(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
|
559
622
|
(r0_1 = match(:list_term)) &&
|
560
|
-
|
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]))
|
561
650
|
end || begin
|
562
651
|
@scanner.pos = p0
|
563
652
|
false
|
@@ -653,7 +742,7 @@ module Rattler
|
|
653
742
|
begin
|
654
743
|
(r0_0 = match(:primary)) &&
|
655
744
|
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\?)/) &&
|
656
|
-
|
745
|
+
(optional r0_0)
|
657
746
|
end || begin
|
658
747
|
@scanner.pos = p0
|
659
748
|
false
|
@@ -664,7 +753,7 @@ module Rattler
|
|
664
753
|
begin
|
665
754
|
(r0_0 = match(:primary)) &&
|
666
755
|
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\*))(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
|
667
|
-
|
756
|
+
(zero_or_more r0_0)
|
668
757
|
end || begin
|
669
758
|
@scanner.pos = p0
|
670
759
|
false
|
@@ -675,7 +764,32 @@ module Rattler
|
|
675
764
|
begin
|
676
765
|
(r0_0 = match(:primary)) &&
|
677
766
|
@scanner.skip(/(?>(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>\+))(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>,))/) &&
|
678
|
-
|
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]))
|
679
793
|
end || begin
|
680
794
|
@scanner.pos = p0
|
681
795
|
false
|
@@ -706,6 +820,10 @@ module Rattler
|
|
706
820
|
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>EOF)(?![[:alnum:]_]))/) &&
|
707
821
|
Eof.parsed([])
|
708
822
|
end ||
|
823
|
+
begin
|
824
|
+
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>E)(?![[:alnum:]_]))/) &&
|
825
|
+
ESymbol.parsed([])
|
826
|
+
end ||
|
709
827
|
begin
|
710
828
|
(r = begin
|
711
829
|
begin
|
@@ -772,7 +890,7 @@ module Rattler
|
|
772
890
|
begin
|
773
891
|
@scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?>(?>EOF)(?![[:alnum:]_])))/) &&
|
774
892
|
(r0_0 = begin
|
775
|
-
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:alnum:]_])
|
893
|
+
@scanner.skip(/(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)((?>[[:alpha:]])(?>(?>[[:alnum:]_])*))/) &&
|
776
894
|
@scanner[1]
|
777
895
|
end) &&
|
778
896
|
@scanner.skip(/(?!(?>(?>(?>[[:space:]])+|(?>\#)(?>(?>[^\n])*))*)(?><\-))/) &&
|
@@ -44,14 +44,20 @@ include Rattler::Parsers
|
|
44
44
|
expression <- expression ~'/' attributed <Choice>
|
45
45
|
/ attributed
|
46
46
|
|
47
|
-
attributed <- attributed ~'<' node_action? literal? ~'>'
|
48
|
-
/ attributed ~'{' action ~'}'
|
49
|
-
/
|
47
|
+
attributed <- attributed? ~'<' node_action? literal? ~'>' <DispatchAction>
|
48
|
+
/ attributed? ~'{' action ~'}' <DirectAction>
|
49
|
+
/ attributed? ~'~' ~'{' action ~'}' <SideEffect>
|
50
|
+
/ attributed? ~'&' ~'{' action ~'}' <SemanticAssert>
|
51
|
+
/ attributed? ~'!' ~'{' action ~'}' <SemanticDisallow>
|
52
|
+
/ attributed_terms
|
50
53
|
|
51
54
|
node_action <- @(name (~'.' var_name)?)
|
52
55
|
|
53
|
-
action <- @(
|
54
|
-
/ [^{}])*
|
56
|
+
action <- @(( '{' [^}]* '}'
|
57
|
+
/ [^{}] )*)
|
58
|
+
|
59
|
+
attributed_terms <- attributed term <Sequence>
|
60
|
+
/ terms
|
55
61
|
|
56
62
|
terms <- terms term <Sequence>
|
57
63
|
/ term
|
@@ -68,8 +74,9 @@ include Rattler::Parsers
|
|
68
74
|
labelable <- list
|
69
75
|
/ list_term
|
70
76
|
|
71
|
-
list <- list_term ~'
|
72
|
-
/ list_term ~'
|
77
|
+
list <- list_term ~('*' ',') list_term { list0 *_ }
|
78
|
+
/ list_term ~('+' ',') list_term { list1 *_ }
|
79
|
+
/ list_term repeat_count ~',' list_term <ListParser>
|
73
80
|
|
74
81
|
list_term <- prefixed
|
75
82
|
/ prefixable
|
@@ -82,14 +89,20 @@ include Rattler::Parsers
|
|
82
89
|
|
83
90
|
prefixable <- suffixed / primary
|
84
91
|
|
85
|
-
suffixed <- primary ~'?'
|
86
|
-
/ primary ~'*' !','
|
87
|
-
/ primary ~'+' !','
|
92
|
+
suffixed <- primary ~'?' { optional _ }
|
93
|
+
/ primary ~'*' !',' { zero_or_more _ }
|
94
|
+
/ primary ~'+' !',' { one_or_more _ }
|
95
|
+
/ primary repeat_count !',' <Repeat>
|
96
|
+
|
97
|
+
repeat_count <- @DIGIT+ ~'..' @DIGIT+ { _.map {|s| s.to_i } }
|
98
|
+
/ @DIGIT+ ~'..' { [_.to_i, nil] }
|
99
|
+
/ @DIGIT+ { [_.to_i] * 2 }
|
88
100
|
|
89
101
|
primary <- ~'(' expression ~')'
|
90
102
|
/ atom
|
91
103
|
|
92
104
|
atom <- ~`EOF` <Eof>
|
105
|
+
/ ~`E` <ESymbol>
|
93
106
|
/ posix_class { posix_class _ }
|
94
107
|
/ identifier !'<-' <Apply>
|
95
108
|
/ literal { literal _ }
|
@@ -132,7 +145,7 @@ include Rattler::Parsers
|
|
132
145
|
name <- var_name
|
133
146
|
/ constant
|
134
147
|
|
135
|
-
identifier <- !`EOF` @WORD
|
148
|
+
identifier <- !`EOF` @(ALPHA WORD*)
|
136
149
|
|
137
150
|
back_reference <- @('$' LOWER WORD*)
|
138
151
|
|
@@ -165,6 +178,6 @@ include Rattler::Parsers
|
|
165
178
|
/ '\\' .
|
166
179
|
/ [^\\\]] )
|
167
180
|
|
168
|
-
eol <- ~(BLANK* (EOF / ';' / ("\r"? "\n") /
|
181
|
+
eol <- ~(BLANK* (EOF / ';' / ("\r"? "\n") / comment))
|
169
182
|
|
170
183
|
comment <- ~('#' [^\n]*)
|