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.
- data/README.rdoc +3 -175
- data/features/README.markdown +27 -0
- data/features/Tutorial.md +224 -0
- data/features/command_line/output_option.feature +2 -1
- data/features/command_line/{parser_generator.feature → rtlr.feature} +43 -15
- data/features/error_reporting/automatic_error_messages.feature +40 -0
- data/features/error_reporting/custom_error_messages.feature +28 -0
- data/features/examples/json_parser.markdown +88 -0
- data/features/{grammar → extended_matching_syntax}/back_reference.feature +5 -3
- data/features/{grammar → extended_matching_syntax}/e_symbol.feature +2 -2
- data/features/{grammar → extended_matching_syntax}/eof.feature +4 -3
- data/features/{grammar → extended_matching_syntax}/fail.feature +8 -6
- data/features/extended_matching_syntax/fragments.feature +29 -0
- data/features/extended_matching_syntax/include.feature +42 -0
- data/features/{grammar → extended_matching_syntax}/list_matching.feature +7 -6
- data/features/extended_matching_syntax/posix_class.feature +127 -0
- data/features/{grammar → extended_matching_syntax}/repeat.feature +29 -3
- data/features/{grammar → extended_matching_syntax}/skip_operator.feature +2 -1
- data/features/extended_matching_syntax/super.feature +24 -0
- data/features/{grammar → extended_matching_syntax}/token.feature +6 -5
- data/features/{grammar → extended_matching_syntax}/whitespace.feature +7 -6
- data/features/{grammar → extended_matching_syntax}/word_literal.feature +10 -6
- data/features/grammar_heading/explicit_start_rule.feature +20 -0
- data/features/grammar_heading/grammar_declaration.feature +60 -0
- data/features/grammar_heading/include.feature +19 -0
- data/features/grammar_heading/require.feature +27 -0
- data/features/{grammar → peg_syntax}/any_character.feature +1 -1
- data/features/peg_syntax/character_class.feature +25 -0
- data/features/{grammar → peg_syntax}/comments.feature +1 -1
- data/features/{grammar → peg_syntax}/literal.feature +5 -3
- data/features/{grammar → peg_syntax}/negative_lookahead.feature +5 -3
- data/features/peg_syntax/nonterminal.feature +46 -0
- data/features/peg_syntax/one_or_more.feature +59 -0
- data/features/{grammar → peg_syntax}/optional.feature +2 -2
- data/features/peg_syntax/ordered_choice.feature +24 -0
- data/features/{grammar → peg_syntax}/positive_lookahead.feature +6 -4
- data/features/peg_syntax/sequence.feature +23 -0
- data/features/{grammar → peg_syntax}/start_rule.feature +1 -1
- data/features/peg_syntax/zero_or_more.feature +59 -0
- data/features/{grammar → semantics}/labels.feature +0 -0
- data/features/{grammar → semantics}/negative_semantic_predicate.feature +30 -9
- data/features/{grammar → semantics}/node_action.feature +0 -0
- data/features/{grammar → semantics}/positive_semantic_predicate.feature +29 -8
- data/features/{grammar/symantic_action.feature → semantics/semantic_action.feature} +2 -2
- data/features/semantics/semantic_result.feature +86 -0
- data/features/{grammar → semantics}/side_effect.feature +33 -21
- data/features/step_definitions/cli_steps.rb +1 -1
- data/features/step_definitions/grammar_steps.rb +19 -5
- data/features/support/env.rb +5 -0
- data/lib/rattler.rb +21 -44
- data/lib/rattler/compiler.rb +69 -0
- data/lib/rattler/{grammar → compiler}/grammar_parser.rb +58 -24
- data/lib/rattler/compiler/metagrammar.rb +1570 -0
- data/lib/rattler/compiler/optimizer.rb +77 -0
- data/lib/rattler/{back_end → compiler}/optimizer/composite_reducing.rb +2 -2
- data/lib/rattler/{back_end → compiler}/optimizer/flatten_choice.rb +3 -12
- data/lib/rattler/{back_end → compiler}/optimizer/flatten_sequence.rb +4 -16
- data/lib/rattler/{back_end → compiler}/optimizer/flattening.rb +2 -2
- data/lib/rattler/compiler/optimizer/inline_regular_rules.rb +24 -0
- data/lib/rattler/{back_end → compiler}/optimizer/join_match_capturing_sequence.rb +16 -14
- data/lib/rattler/{back_end → compiler}/optimizer/join_match_choice.rb +4 -13
- data/lib/rattler/{back_end → compiler}/optimizer/join_match_matching_sequence.rb +4 -13
- data/lib/rattler/compiler/optimizer/join_match_sequence.rb +7 -0
- data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_bare_match.rb +3 -12
- data/lib/rattler/compiler/optimizer/join_predicate_match.rb +7 -0
- data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_nested_match.rb +4 -13
- data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_or_bare_match.rb +3 -12
- data/lib/rattler/compiler/optimizer/join_predicate_or_match.rb +7 -0
- data/lib/rattler/{back_end → compiler}/optimizer/join_predicate_or_nested_match.rb +4 -13
- data/lib/rattler/{back_end → compiler}/optimizer/match_joining.rb +2 -2
- data/lib/rattler/{back_end → compiler}/optimizer/optimization.rb +12 -34
- data/lib/rattler/compiler/optimizer/optimization_context.rb +83 -0
- data/lib/rattler/{back_end → compiler}/optimizer/optimization_sequence.rb +3 -11
- data/lib/rattler/compiler/optimizer/optimizations.rb +27 -0
- data/lib/rattler/{back_end → compiler}/optimizer/optimize_children.rb +6 -14
- data/lib/rattler/{back_end → compiler}/optimizer/reduce_repeat_match.rb +4 -13
- data/lib/rattler/compiler/optimizer/remove_meaningless_wrapper.rb +22 -0
- data/lib/rattler/{back_end → compiler}/optimizer/simplify_redundant_repeat.rb +4 -13
- data/lib/rattler/{back_end → compiler}/optimizer/simplify_token_match.rb +4 -13
- data/lib/rattler/compiler/parser_generator.rb +108 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/apply_generator.rb +7 -21
- data/lib/rattler/{back_end → compiler}/parser_generator/assert_generator.rb +11 -19
- data/lib/rattler/compiler/parser_generator/attributed_sequence_generator.rb +37 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/back_reference_generator.rb +10 -10
- data/lib/rattler/{back_end → compiler}/parser_generator/choice_generator.rb +10 -22
- data/lib/rattler/{back_end → compiler}/parser_generator/delegating_generator.rb +2 -2
- data/lib/rattler/{back_end → compiler}/parser_generator/disallow_generator.rb +11 -19
- data/lib/rattler/{back_end → compiler}/parser_generator/e_symbol_generator.rb +2 -10
- data/lib/rattler/{back_end → compiler}/parser_generator/eof_generator.rb +2 -10
- data/lib/rattler/{back_end → compiler}/parser_generator/expr_generator.rb +9 -35
- data/lib/rattler/{back_end → compiler}/parser_generator/fail_generator.rb +7 -3
- data/lib/rattler/{back_end → compiler}/parser_generator/gen_method_names.rb +3 -5
- data/lib/rattler/{back_end → compiler}/parser_generator/general_list_generator.rb +6 -18
- data/lib/rattler/{back_end → compiler}/parser_generator/general_repeat_generator.rb +16 -22
- data/lib/rattler/{back_end/parser_generator/rule_set_generator.rb → compiler/parser_generator/grammar_generator.rb} +24 -33
- data/lib/rattler/compiler/parser_generator/group_match.rb +33 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/group_match_generator.rb +4 -17
- data/lib/rattler/compiler/parser_generator/label_generator.rb +37 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/list0_generating.rb +5 -5
- data/lib/rattler/{back_end → compiler}/parser_generator/list1_generating.rb +3 -3
- data/lib/rattler/{back_end → compiler}/parser_generator/list_generator.rb +2 -2
- data/lib/rattler/{back_end → compiler}/parser_generator/match_generator.rb +10 -10
- data/lib/rattler/{back_end → compiler}/parser_generator/nested.rb +2 -2
- data/lib/rattler/compiler/parser_generator/node_action_generator.rb +49 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/one_or_more_generating.rb +3 -3
- data/lib/rattler/{back_end → compiler}/parser_generator/optional_generating.rb +6 -22
- data/lib/rattler/compiler/parser_generator/predicate_propogating.rb +24 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/repeat_generator.rb +2 -2
- data/lib/rattler/compiler/parser_generator/rule_generator.rb +66 -0
- data/lib/rattler/compiler/parser_generator/rule_set_generator.rb +33 -0
- data/lib/rattler/compiler/parser_generator/semantic_action_generator.rb +58 -0
- data/lib/rattler/compiler/parser_generator/sequence_generating.rb +138 -0
- data/lib/rattler/compiler/parser_generator/sequence_generator.rb +57 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/skip_generator.rb +4 -18
- data/lib/rattler/compiler/parser_generator/skip_propogating.rb +16 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/sub_generating.rb +19 -11
- data/lib/rattler/compiler/parser_generator/super_generator.rb +54 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/token_generator.rb +3 -3
- data/lib/rattler/compiler/parser_generator/token_propogating.rb +10 -0
- data/lib/rattler/{back_end → compiler}/parser_generator/top_level.rb +2 -2
- data/lib/rattler/{back_end → compiler}/parser_generator/zero_or_more_generating.rb +5 -5
- data/lib/rattler/compiler/rattler.rtlr +201 -0
- data/lib/rattler/{back_end → compiler}/ruby_generator.rb +16 -25
- data/lib/rattler/parsers.rb +12 -33
- data/lib/rattler/parsers/action_code.rb +25 -16
- data/lib/rattler/{grammar → parsers}/analysis.rb +32 -11
- data/lib/rattler/parsers/apply.rb +10 -19
- data/lib/rattler/parsers/assert.rb +4 -14
- data/lib/rattler/parsers/atomic.rb +3 -10
- data/lib/rattler/parsers/attributed_sequence.rb +50 -0
- data/lib/rattler/parsers/back_reference.rb +19 -14
- data/lib/rattler/parsers/choice.rb +11 -12
- data/lib/rattler/parsers/combinator_parser.rb +15 -7
- data/lib/rattler/parsers/combining.rb +15 -9
- data/lib/rattler/parsers/disallow.rb +5 -12
- data/lib/rattler/parsers/e_symbol.rb +5 -14
- data/lib/rattler/parsers/eof.rb +10 -15
- data/lib/rattler/parsers/fail.rb +16 -26
- data/lib/rattler/{grammar → parsers}/grammar.rb +15 -20
- data/lib/rattler/parsers/label.rb +10 -16
- data/lib/rattler/parsers/list_parser.rb +14 -14
- data/lib/rattler/parsers/match.rb +5 -17
- data/lib/rattler/parsers/node_action.rb +72 -0
- data/lib/rattler/parsers/node_code.rb +47 -30
- data/lib/rattler/parsers/parser.rb +63 -32
- data/lib/rattler/parsers/parser_scope.rb +88 -0
- data/lib/rattler/parsers/predicate.rb +12 -10
- data/lib/rattler/parsers/repeat.rb +15 -8
- data/lib/rattler/parsers/rule.rb +8 -23
- data/lib/rattler/parsers/rule_set.rb +67 -12
- data/lib/rattler/parsers/semantic.rb +36 -0
- data/lib/rattler/parsers/semantic_action.rb +39 -0
- data/lib/rattler/parsers/sequence.rb +25 -40
- data/lib/rattler/parsers/sequencing.rb +40 -0
- data/lib/rattler/parsers/skip.rb +11 -12
- data/lib/rattler/parsers/super.rb +33 -0
- data/lib/rattler/parsers/token.rb +3 -13
- data/lib/rattler/rake_task.rb +50 -0
- data/lib/rattler/runner.rb +19 -22
- data/lib/rattler/runtime.rb +0 -10
- data/lib/rattler/runtime/extended_packrat_parser.rb +40 -45
- data/lib/rattler/runtime/packrat_parser.rb +17 -31
- data/lib/rattler/runtime/parse_failure.rb +16 -26
- data/lib/rattler/runtime/parse_node.rb +8 -18
- data/lib/rattler/runtime/parser.rb +6 -18
- data/lib/rattler/runtime/parser_helper.rb +3 -10
- data/lib/rattler/runtime/recursive_descent_parser.rb +26 -23
- data/lib/rattler/runtime/syntax_error.rb +0 -10
- data/lib/rattler/util.rb +2 -6
- data/lib/rattler/util/grammar_cli.rb +19 -0
- data/lib/rattler/util/graphviz.rb +6 -17
- data/lib/rattler/util/graphviz/digraph_builder.rb +10 -17
- data/lib/rattler/util/graphviz/node_builder.rb +45 -31
- data/lib/rattler/util/line_counter.rb +11 -20
- data/lib/rattler/util/node.rb +52 -30
- data/lib/rattler/util/parser_cli.rb +84 -0
- data/lib/rattler/util/parser_spec_helper.rb +8 -12
- data/spec/rattler/compiler/assert_compiler_examples.rb +284 -0
- data/spec/rattler/compiler/attributed_sequence_compiler_examples.rb +154 -0
- data/spec/rattler/compiler/disallow_compiler_examples.rb +293 -0
- data/spec/rattler/compiler/grammar_parser_spec.rb +700 -0
- data/spec/rattler/{back_end → compiler}/optimizer/flatten_choice_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/flatten_sequence_spec.rb +1 -1
- data/spec/rattler/compiler/optimizer/inline_regular_rules_spec.rb +50 -0
- data/spec/rattler/{back_end → compiler}/optimizer/join_match_capturing_sequence_spec.rb +106 -22
- data/spec/rattler/{back_end → compiler}/optimizer/join_match_choice_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/join_match_matching_sequence_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_bare_match_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_nested_match_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_or_bare_match_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/join_predicate_or_nested_match_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/reduce_repeat_match_spec.rb +1 -1
- data/spec/rattler/compiler/optimizer/remove_meaningless_wrapper_spec.rb +82 -0
- data/spec/rattler/{back_end → compiler}/optimizer/simplify_redundant_repeat_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer/simplify_token_match_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/optimizer_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/parser_generator/apply_generator_spec.rb +1 -39
- data/spec/rattler/{back_end → compiler}/parser_generator/assert_generator_spec.rb +1 -55
- data/spec/rattler/compiler/parser_generator/attributed_sequence_generator_spec.rb +699 -0
- data/spec/rattler/{back_end → compiler}/parser_generator/back_reference_generator_spec.rb +3 -56
- data/spec/rattler/{back_end → compiler}/parser_generator/choice_generator_spec.rb +1 -63
- data/spec/rattler/{back_end → compiler}/parser_generator/disallow_generator_spec.rb +1 -55
- data/spec/rattler/{back_end → compiler}/parser_generator/e_symbol_generator_spec.rb +1 -39
- data/spec/rattler/{back_end → compiler}/parser_generator/eof_generator_spec.rb +1 -39
- data/spec/rattler/{back_end → compiler}/parser_generator/fail_generator_spec.rb +94 -23
- data/spec/rattler/compiler/parser_generator/grammar_generator_spec.rb +98 -0
- data/spec/rattler/compiler/parser_generator/group_match_generator_spec.rb +67 -0
- data/spec/rattler/{back_end → compiler}/parser_generator/group_match_spec.rb +1 -1
- data/spec/rattler/{back_end → compiler}/parser_generator/label_generator_spec.rb +1 -55
- data/spec/rattler/{back_end → compiler}/parser_generator/list0_generator_examples.rb +0 -88
- data/spec/rattler/{back_end → compiler}/parser_generator/list1_generator_examples.rb +0 -88
- data/spec/rattler/{back_end → compiler}/parser_generator/list_generator_spec.rb +1 -227
- data/spec/rattler/{back_end → compiler}/parser_generator/match_generator_spec.rb +1 -55
- data/spec/rattler/compiler/parser_generator/node_action_generator_spec.rb +135 -0
- data/spec/rattler/{back_end → compiler}/parser_generator/one_or_more_generator_examples.rb +0 -74
- data/spec/rattler/{back_end → compiler}/parser_generator/optional_generator_examples.rb +0 -62
- data/spec/rattler/{back_end → compiler}/parser_generator/repeat_generator_spec.rb +66 -1
- data/spec/rattler/{back_end → compiler}/parser_generator/rule_generator_spec.rb +3 -2
- data/spec/rattler/{back_end → compiler}/parser_generator/rule_set_generator_spec.rb +9 -27
- data/spec/rattler/compiler/parser_generator/semantic_action_generator_spec.rb +437 -0
- data/spec/rattler/{back_end → compiler}/parser_generator/sequence_generator_spec.rb +234 -68
- data/spec/rattler/{back_end → compiler}/parser_generator/skip_generator_spec.rb +1 -55
- data/spec/rattler/compiler/parser_generator/super_generator_spec.rb +93 -0
- data/spec/rattler/{back_end → compiler}/parser_generator/token_generator_spec.rb +1 -55
- data/spec/rattler/{back_end → compiler}/parser_generator/zero_or_more_generator_examples.rb +0 -74
- data/spec/rattler/{back_end → compiler}/ruby_generator_spec.rb +13 -13
- data/spec/rattler/compiler/semantic_action_compiler_examples.rb +57 -0
- data/spec/rattler/{back_end → compiler}/shared_compiler_examples.rb +111 -140
- data/spec/rattler/{back_end → compiler}/skip_compiler_examples.rb +60 -57
- data/spec/rattler/{back_end → compiler}/token_compiler_examples.rb +99 -104
- data/spec/rattler/compiler_spec.rb +67 -0
- data/spec/rattler/parsers/action_code_spec.rb +34 -18
- data/spec/rattler/{grammar → parsers}/analysis_spec.rb +13 -67
- data/spec/rattler/parsers/apply_spec.rb +6 -0
- data/spec/rattler/parsers/assert_spec.rb +38 -2
- data/spec/rattler/parsers/attributed_sequence_spec.rb +204 -0
- data/spec/rattler/parsers/back_reference_spec.rb +6 -0
- data/spec/rattler/parsers/choice_spec.rb +38 -1
- data/spec/rattler/parsers/combinator_parser_spec.rb +2 -1
- data/spec/rattler/parsers/disallow_spec.rb +38 -2
- data/spec/rattler/parsers/e_symbol_spec.rb +6 -0
- data/spec/rattler/parsers/eof_spec.rb +6 -0
- data/spec/rattler/parsers/fail_spec.rb +6 -0
- data/spec/rattler/{grammar → parsers}/grammar_spec.rb +10 -15
- data/spec/rattler/parsers/label_spec.rb +30 -0
- data/spec/rattler/parsers/list_parser_spec.rb +31 -2
- data/spec/rattler/parsers/match_spec.rb +6 -0
- data/spec/rattler/parsers/node_action_spec.rb +121 -0
- data/spec/rattler/parsers/parser_scope_spec.rb +105 -0
- data/spec/rattler/parsers/repeat_spec.rb +56 -0
- data/spec/rattler/parsers/rule_set_spec.rb +42 -0
- data/spec/rattler/parsers/semantic_action_spec.rb +89 -0
- data/spec/rattler/parsers/sequence_spec.rb +156 -12
- data/spec/rattler/parsers/skip_spec.rb +21 -0
- data/spec/rattler/parsers/super_spec.rb +45 -0
- data/spec/rattler/parsers/token_spec.rb +33 -14
- data/spec/rattler/runtime/extended_packrat_parser_spec.rb +10 -8
- data/spec/rattler/runtime/recursive_descent_parser_spec.rb +26 -0
- data/spec/rattler/runtime/shared_parser_examples.rb +22 -16
- data/spec/rattler/util/graphviz/node_builder_spec.rb +33 -17
- data/spec/rattler/util/line_counter_spec.rb +21 -21
- data/spec/rattler/util/node_spec.rb +62 -0
- data/spec/rattler_spec.rb +7 -41
- data/spec/spec_helper.rb +1 -2
- data/spec/support/combinator_parser_spec_helper.rb +1 -1
- data/spec/support/compiler_spec_helper.rb +0 -4
- data/spec/support/parser_generator_spec_helper.rb +7 -7
- data/spec/support/runtime_parser_spec_helper.rb +57 -3
- metadata +447 -303
- data/features/grammar/character_class.feature +0 -20
- data/features/grammar/nonterminal.feature +0 -24
- data/features/grammar/one_or_more.feature +0 -34
- data/features/grammar/ordered_choice.feature +0 -21
- data/features/grammar/posix_class.feature +0 -70
- data/features/grammar/sequence.feature +0 -20
- data/features/grammar/zero_or_more.feature +0 -34
- data/lib/rattler/back_end.rb +0 -22
- data/lib/rattler/back_end/compiler.rb +0 -128
- data/lib/rattler/back_end/optimizer.rb +0 -101
- data/lib/rattler/back_end/optimizer/inline_regular_rules.rb +0 -46
- data/lib/rattler/back_end/optimizer/join_match_sequence.rb +0 -17
- data/lib/rattler/back_end/optimizer/join_predicate_match.rb +0 -17
- data/lib/rattler/back_end/optimizer/join_predicate_or_match.rb +0 -17
- data/lib/rattler/back_end/optimizer/optimization_context.rb +0 -72
- data/lib/rattler/back_end/optimizer/remove_meaningless_wrapper.rb +0 -32
- data/lib/rattler/back_end/optimizer/specialize_repeat.rb +0 -40
- data/lib/rattler/back_end/parser_generator.rb +0 -113
- data/lib/rattler/back_end/parser_generator/direct_action_generator.rb +0 -45
- data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rb +0 -45
- data/lib/rattler/back_end/parser_generator/group_match.rb +0 -26
- data/lib/rattler/back_end/parser_generator/label_generator.rb +0 -64
- data/lib/rattler/back_end/parser_generator/predicate_propogating.rb +0 -24
- data/lib/rattler/back_end/parser_generator/rule_generator.rb +0 -53
- data/lib/rattler/back_end/parser_generator/sequence_generator.rb +0 -190
- data/lib/rattler/back_end/parser_generator/skip_propogating.rb +0 -16
- data/lib/rattler/back_end/parser_generator/token_propogating.rb +0 -10
- data/lib/rattler/grammar.rb +0 -43
- data/lib/rattler/grammar/grammar_dsl.rb +0 -51
- data/lib/rattler/grammar/metagrammar.rb +0 -990
- data/lib/rattler/grammar/rattler.rtlr +0 -183
- data/lib/rattler/parsers/assert_code.rb +0 -31
- data/lib/rattler/parsers/direct_action.rb +0 -85
- data/lib/rattler/parsers/disallow_code.rb +0 -31
- data/lib/rattler/parsers/dispatch_action.rb +0 -121
- data/lib/rattler/parsers/effect_code.rb +0 -31
- data/lib/rattler/parsers/parser_dsl.rb +0 -414
- data/lib/rattler/parsers/semantic_assert.rb +0 -19
- data/lib/rattler/parsers/semantic_disallow.rb +0 -19
- data/lib/rattler/parsers/side_effect.rb +0 -19
- data/spec/rattler/back_end/assert_compiler_examples.rb +0 -187
- data/spec/rattler/back_end/compiler_spec.rb +0 -43
- data/spec/rattler/back_end/direct_action_compiler_examples.rb +0 -227
- data/spec/rattler/back_end/disallow_compiler_examples.rb +0 -187
- data/spec/rattler/back_end/dispatch_action_compiler_examples.rb +0 -225
- data/spec/rattler/back_end/optimizer/inline_regular_rules_spec.rb +0 -80
- data/spec/rattler/back_end/parser_generator/direct_action_generator_spec.rb +0 -204
- data/spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb +0 -204
- data/spec/rattler/back_end/parser_generator/group_match_generator_spec.rb +0 -185
- data/spec/rattler/back_end/semantic_assert_compiler_examples.rb +0 -152
- data/spec/rattler/back_end/semantic_disallow_compiler_examples.rb +0 -152
- data/spec/rattler/back_end/side_effect_compiler_examples.rb +0 -227
- data/spec/rattler/grammar/grammar_parser_spec.rb +0 -626
- data/spec/rattler/parsers/direct_action_spec.rb +0 -224
- data/spec/rattler/parsers/dispatch_action_spec.rb +0 -209
- data/spec/rattler/parsers/node_code_spec.rb +0 -59
- data/spec/rattler/parsers/parser_dsl_spec.rb +0 -334
- data/spec/rattler/parsers/semantic_assert_spec.rb +0 -83
- data/spec/rattler/parsers/semantic_disallow_spec.rb +0 -83
- data/spec/rattler/parsers/side_effect_spec.rb +0 -214
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'rattler/parsers'
|
2
|
-
|
3
|
-
module Rattler::Parsers
|
4
|
-
#
|
5
|
-
# +SemanticDisallow+ decorates a parser to peform a symantic action on success
|
6
|
-
# by evaluating ruby code and succeed if the result is a false value.
|
7
|
-
#
|
8
|
-
# @author Jason Arhart
|
9
|
-
#
|
10
|
-
class SemanticDisallow < DirectAction
|
11
|
-
|
12
|
-
protected
|
13
|
-
|
14
|
-
def create_bindable_code
|
15
|
-
DisallowCode.new(code)
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'rattler/parsers'
|
2
|
-
|
3
|
-
module Rattler::Parsers
|
4
|
-
#
|
5
|
-
# +SideEffect+ decorates a parser to peform a symantic action on success by
|
6
|
-
# evaluating ruby code for effect and discarding the result.
|
7
|
-
#
|
8
|
-
# @author Jason Arhart
|
9
|
-
#
|
10
|
-
class SideEffect < DirectAction
|
11
|
-
|
12
|
-
protected
|
13
|
-
|
14
|
-
def create_bindable_code
|
15
|
-
EffectCode.new(code)
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
@@ -1,187 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
-
|
3
|
-
shared_examples_for 'a compiled parser with an assert' do
|
4
|
-
include CompilerSpecHelper
|
5
|
-
|
6
|
-
subject { compiled_parser }
|
7
|
-
|
8
|
-
let(:reference_parser) { combinator_parser grammar }
|
9
|
-
|
10
|
-
context 'with a nested match rule' do
|
11
|
-
let(:grammar) { define_grammar do
|
12
|
-
rule(:word) { assert /\w+/ }
|
13
|
-
end }
|
14
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
15
|
-
it { should parse(' ').failing.like reference_parser }
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'with a nested eof rule' do
|
19
|
-
let(:grammar) { define_grammar do
|
20
|
-
rule(:foo) { assert(eof) }
|
21
|
-
end }
|
22
|
-
it { should parse('').succeeding.like reference_parser }
|
23
|
-
it { should parse('foo').from(3).succeeding.like reference_parser }
|
24
|
-
it { should parse('foo').failing.like reference_parser }
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'with a nested "E" symbol rule' do
|
28
|
-
let(:grammar) { define_grammar do
|
29
|
-
rule(:foo) { assert(e) }
|
30
|
-
end }
|
31
|
-
it { should parse('').succeeding.like reference_parser }
|
32
|
-
it { should parse('foo').succeeding.like reference_parser }
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'with a nested choice rule' do
|
36
|
-
let(:grammar) { define_grammar do
|
37
|
-
rule(:word) { assert(match(/[[:alpha:]]+/) | match(/[[:digit:]]+/)) }
|
38
|
-
end }
|
39
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
40
|
-
it { should parse(' ').failing.like reference_parser }
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'with a nested sequence rule' do
|
44
|
-
let(:grammar) { define_grammar do
|
45
|
-
rule(:word) { assert(match(/[[:alpha:]]+/) & match(/[[:digit:]]+/)) }
|
46
|
-
end }
|
47
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
48
|
-
it { should parse(' ').failing.like reference_parser }
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'with a nested optional rule' do
|
52
|
-
let(:grammar) { define_grammar do
|
53
|
-
rule(:word) { assert(optional(/\w+/)) }
|
54
|
-
end }
|
55
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
56
|
-
it { should parse(' ').succeeding.like reference_parser }
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'with a nested zero-or-more rule' do
|
60
|
-
let(:grammar) { define_grammar do
|
61
|
-
rule(:word) { assert(zero_or_more(/\w/)) }
|
62
|
-
end }
|
63
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
64
|
-
it { should parse(' ').succeeding.like reference_parser }
|
65
|
-
end
|
66
|
-
|
67
|
-
context 'with a nested one-or-more rule' do
|
68
|
-
let(:grammar) { define_grammar do
|
69
|
-
rule(:word) { assert(one_or_more(/\w/)) }
|
70
|
-
end }
|
71
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
72
|
-
it { should parse(' ').failing.like reference_parser }
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'with a nested repeat rule' do
|
76
|
-
let(:grammar) { define_grammar do
|
77
|
-
rule(:word) { assert(repeat(/\w/, 2, nil)) }
|
78
|
-
end }
|
79
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
80
|
-
it { should parse('a ').failing.like reference_parser }
|
81
|
-
|
82
|
-
context 'with zero-or-more bounds' do
|
83
|
-
let(:grammar) { define_grammar do
|
84
|
-
rule(:word) { assert(repeat(/\w/, 0, nil)) }
|
85
|
-
end }
|
86
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
87
|
-
it { should parse(' ').succeeding.like reference_parser }
|
88
|
-
|
89
|
-
context 'with an upper bound' do
|
90
|
-
let(:grammar) { define_grammar do
|
91
|
-
rule(:word) { assert(repeat(/\w/, 0, 2)) }
|
92
|
-
end }
|
93
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
94
|
-
it { should parse(' ').succeeding.like reference_parser }
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'with one-or-more bounds' do
|
99
|
-
let(:grammar) { define_grammar do
|
100
|
-
rule(:word) { assert(repeat(/\w/, 1, nil)) }
|
101
|
-
end }
|
102
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
103
|
-
it { should parse(' ').failing.like reference_parser }
|
104
|
-
|
105
|
-
context 'with an upper bound' do
|
106
|
-
let(:grammar) { define_grammar do
|
107
|
-
rule(:word) { assert(repeat(/\w/, 1, 2)) }
|
108
|
-
end }
|
109
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
110
|
-
it { should parse(' ').failing.like reference_parser }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context 'with a nested list rule' do
|
116
|
-
let(:grammar) { define_grammar do
|
117
|
-
rule :foo do
|
118
|
-
assert list(/\w+/, /[,;]/, 2, nil)
|
119
|
-
end
|
120
|
-
end }
|
121
|
-
it { should parse('foo ').failing.like reference_parser }
|
122
|
-
it { should parse('foo,bar;baz ').succeeding.like reference_parser }
|
123
|
-
|
124
|
-
context 'with an upper bound' do
|
125
|
-
let(:grammar) { define_grammar do
|
126
|
-
rule :foo do
|
127
|
-
assert list(/\w+/, /[,;]/, 2, 4)
|
128
|
-
end
|
129
|
-
end }
|
130
|
-
it { should parse('foo ').failing.like reference_parser }
|
131
|
-
it { should parse('foo,bar;baz ').succeeding.like reference_parser }
|
132
|
-
end
|
133
|
-
|
134
|
-
context 'with a non-capturing parser' do
|
135
|
-
let(:grammar) { define_grammar do
|
136
|
-
rule :foo do
|
137
|
-
assert list(skip(/\w+/), /[,;]/, 2, nil)
|
138
|
-
end
|
139
|
-
end }
|
140
|
-
it { should parse('foo ').failing.like reference_parser }
|
141
|
-
it { should parse('foo,bar;baz ').succeeding.like reference_parser }
|
142
|
-
|
143
|
-
context 'with an upper bound' do
|
144
|
-
let(:grammar) { define_grammar do
|
145
|
-
rule :foo do
|
146
|
-
assert list(skip(/\w+/), /[,;]/, 2, 4)
|
147
|
-
end
|
148
|
-
end }
|
149
|
-
it { should parse('foo ').failing.like reference_parser }
|
150
|
-
it { should parse('foo,bar;baz ').succeeding.like reference_parser }
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
context 'with a nested apply rule' do
|
156
|
-
let(:grammar) { define_grammar do
|
157
|
-
rule(:foo) { match :word }
|
158
|
-
rule(:word) { assert /\w+/ }
|
159
|
-
end }
|
160
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
161
|
-
it { should parse(' ').failing.like reference_parser }
|
162
|
-
end
|
163
|
-
|
164
|
-
context 'with a nested dispatch-action rule' do
|
165
|
-
let(:grammar) { define_grammar do
|
166
|
-
rule(:word) { assert(dispatch_action(/\w+/)) }
|
167
|
-
end }
|
168
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
169
|
-
it { should parse(' ').failing.like reference_parser }
|
170
|
-
end
|
171
|
-
|
172
|
-
context 'with a nested token rule' do
|
173
|
-
let(:grammar) { define_grammar do
|
174
|
-
rule(:word) { assert(token(match(/\w+/))) }
|
175
|
-
end }
|
176
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
177
|
-
it { should parse(' ').failing.like reference_parser }
|
178
|
-
end
|
179
|
-
|
180
|
-
context 'with a nested skip rule' do
|
181
|
-
let(:grammar) { define_grammar do
|
182
|
-
rule(:word) { assert(skip(/\w+/)) }
|
183
|
-
end }
|
184
|
-
it { should parse('abc123 ').succeeding.like reference_parser }
|
185
|
-
it { should parse(' ').failing.like reference_parser }
|
186
|
-
end
|
187
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/shared_compiler_examples')
|
3
|
-
|
4
|
-
describe Rattler::BackEnd::Compiler do
|
5
|
-
include CompilerSpecHelper
|
6
|
-
|
7
|
-
describe '.compile_parser result' do
|
8
|
-
|
9
|
-
let :compiled_parser do
|
10
|
-
described_class.compile_parser compiled_parser_base, grammar
|
11
|
-
end
|
12
|
-
|
13
|
-
let(:compiled_parser_base) { Rattler::Runtime::RecursiveDescentParser }
|
14
|
-
|
15
|
-
it_behaves_like 'a compiled parser'
|
16
|
-
end
|
17
|
-
|
18
|
-
describe '.compile_parser' do
|
19
|
-
|
20
|
-
context 'given parse rules' do
|
21
|
-
|
22
|
-
let(:grammar) { define_grammar do
|
23
|
-
rule(:word) { match /\w+/ }
|
24
|
-
rule(:space) { match /\s*/ }
|
25
|
-
end }
|
26
|
-
|
27
|
-
let(:parser_base) { Rattler::Runtime::RecursiveDescentParser }
|
28
|
-
|
29
|
-
let(:result) { described_class.compile_parser(parser_base, grammar) }
|
30
|
-
|
31
|
-
it 'compiles a match_xxx method for each rule' do
|
32
|
-
result.should have_method(:match_word)
|
33
|
-
result.should have_method(:match_space)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
def have_method(rule_name)
|
40
|
-
be_method_defined(rule_name)
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
@@ -1,227 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
-
|
3
|
-
shared_examples_for 'a compiled parser with a direct action' do
|
4
|
-
include CompilerSpecHelper
|
5
|
-
|
6
|
-
subject { compiled_parser }
|
7
|
-
|
8
|
-
let(:reference_parser) { combinator_parser grammar }
|
9
|
-
|
10
|
-
context 'with a nested match rule' do
|
11
|
-
let(:grammar) { define_grammar do
|
12
|
-
rule(:num) { direct_action(/\d+/, '|_| _.to_i') }
|
13
|
-
end }
|
14
|
-
it { should parse('451a').succeeding.like reference_parser }
|
15
|
-
it { should parse(' ').failing.like reference_parser }
|
16
|
-
|
17
|
-
context 'with a label' do
|
18
|
-
let(:grammar) { define_grammar do
|
19
|
-
rule(:digits) { direct_action(label(:num, /\d+/), 'num.to_i') }
|
20
|
-
end }
|
21
|
-
it { should parse('451a').succeeding.like reference_parser }
|
22
|
-
it { should parse(' ').failing.like reference_parser }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'with a nested apply rule' do
|
27
|
-
let(:grammar) { define_grammar do
|
28
|
-
rule(:foo) { direct_action :digit, '|_| _.to_i' }
|
29
|
-
rule(:digit) { match(/\d/) }
|
30
|
-
end }
|
31
|
-
it { should parse('451 ').twice.succeeding.like reference_parser }
|
32
|
-
it { should parse('hi').failing.like reference_parser }
|
33
|
-
|
34
|
-
context 'with a label' do
|
35
|
-
let(:grammar) { define_grammar do
|
36
|
-
rule(:num) { direct_action(label(:num, :digits), 'num.to_i') }
|
37
|
-
rule(:digits) { match(/\d+/) }
|
38
|
-
end }
|
39
|
-
it { should parse('451a').succeeding.like reference_parser }
|
40
|
-
it { should parse(' ').failing.like reference_parser }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'with a nested assert rule' do
|
45
|
-
let(:grammar) { define_grammar do
|
46
|
-
rule(:foo) { direct_action(assert(/\d/), ':digit') }
|
47
|
-
end }
|
48
|
-
it { should parse('451a').succeeding.like reference_parser }
|
49
|
-
it { should parse(' ').failing.like reference_parser }
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'with a nested disallow rule' do
|
53
|
-
let(:grammar) { define_grammar do
|
54
|
-
rule(:foo) { direct_action(disallow(/\d/), ':nondigit') }
|
55
|
-
end }
|
56
|
-
it { should parse(' ').succeeding.like reference_parser }
|
57
|
-
it { should parse('451a').failing.like reference_parser }
|
58
|
-
end
|
59
|
-
|
60
|
-
context 'with a nested EOF rule' do
|
61
|
-
let(:grammar) { define_grammar do
|
62
|
-
rule(:foo) { direct_action(eof, ':eof') }
|
63
|
-
end }
|
64
|
-
it { should parse('foo').failing.like reference_parser }
|
65
|
-
it { should parse('').succeeding.like reference_parser }
|
66
|
-
it { should parse('foo').from(3).succeeding.like reference_parser }
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'with a nested "E" symbol rule' do
|
70
|
-
let(:grammar) { define_grammar do
|
71
|
-
rule(:foo) { direct_action(e, ':e') }
|
72
|
-
end }
|
73
|
-
it { should parse('').succeeding.like reference_parser }
|
74
|
-
it { should parse('foo').succeeding.like reference_parser }
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'with a nested choice rule' do
|
78
|
-
let(:grammar) { define_grammar do
|
79
|
-
rule :foo do
|
80
|
-
direct_action(
|
81
|
-
match(/[[:alpha:]]+/) | match(/[[:digit:]]+/),
|
82
|
-
'|_| _.size'
|
83
|
-
)
|
84
|
-
end
|
85
|
-
end }
|
86
|
-
|
87
|
-
it { should parse('abc123').succeeding.like reference_parser }
|
88
|
-
it { should parse('451a').succeeding.like reference_parser }
|
89
|
-
it { should parse(' ').failing.like reference_parser }
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'with a nested sequence rule' do
|
93
|
-
let(:grammar) { define_grammar do
|
94
|
-
rule :assignment do
|
95
|
-
direct_action(
|
96
|
-
match(/[[:alpha:]]+/) & match('=') & match(/[[:digit:]]+/),
|
97
|
-
'|l,_,r| "#{r} -> #{l}"'
|
98
|
-
)
|
99
|
-
end
|
100
|
-
end }
|
101
|
-
|
102
|
-
it { should parse('val=42 ').succeeding.like reference_parser }
|
103
|
-
it { should parse('val=x').failing.like reference_parser }
|
104
|
-
|
105
|
-
context 'with labels' do
|
106
|
-
let(:grammar) { define_grammar do
|
107
|
-
rule :assignment do
|
108
|
-
direct_action(
|
109
|
-
label(:name, /[[:alpha:]]+/) & match('=') & label(:value, /[[:digit:]]+/),
|
110
|
-
'"#{value} -> #{name}"'
|
111
|
-
)
|
112
|
-
end
|
113
|
-
end }
|
114
|
-
it { should parse('val=42 ').succeeding.like reference_parser }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
context 'with a nested optional rule' do
|
119
|
-
let(:grammar) { define_grammar do
|
120
|
-
rule :foo do
|
121
|
-
direct_action(optional(/\w+/), '|_| _.size')
|
122
|
-
end
|
123
|
-
end }
|
124
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
125
|
-
it { should parse(' ').succeeding.like reference_parser }
|
126
|
-
end
|
127
|
-
|
128
|
-
context 'with a nested zero-or-more rule' do
|
129
|
-
let(:grammar) { define_grammar do
|
130
|
-
rule :foo do
|
131
|
-
direct_action(zero_or_more(/\w/), '|_| _.size')
|
132
|
-
end
|
133
|
-
end }
|
134
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
135
|
-
it { should parse(' ').succeeding.like reference_parser }
|
136
|
-
end
|
137
|
-
|
138
|
-
context 'with a nested one-or-more rule' do
|
139
|
-
let(:grammar) { define_grammar do
|
140
|
-
rule :foo do
|
141
|
-
direct_action(one_or_more(/\w/), '|_| _.size')
|
142
|
-
end
|
143
|
-
end }
|
144
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
145
|
-
it { should parse(' ').failing.like reference_parser }
|
146
|
-
end
|
147
|
-
|
148
|
-
context 'with a nested repeat rule' do
|
149
|
-
let(:grammar) { define_grammar do
|
150
|
-
rule :foo do
|
151
|
-
direct_action(repeat(/\w/, 2, 4), '|_| _.size')
|
152
|
-
end
|
153
|
-
end }
|
154
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
155
|
-
it { should parse('abcde ').succeeding.like reference_parser }
|
156
|
-
it { should parse('a ').failing.like reference_parser }
|
157
|
-
|
158
|
-
context 'with optional bounds' do
|
159
|
-
let(:grammar) { define_grammar do
|
160
|
-
rule :foo do
|
161
|
-
direct_action(repeat(/\w+/, 0, 1), '|_| _.size')
|
162
|
-
end
|
163
|
-
end }
|
164
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
165
|
-
it { should parse(' ').succeeding.like reference_parser }
|
166
|
-
end
|
167
|
-
|
168
|
-
context 'with zero-or-more bounds' do
|
169
|
-
let(:grammar) { define_grammar do
|
170
|
-
rule :foo do
|
171
|
-
direct_action(repeat(/\w/, 0, nil), '|_| _.size')
|
172
|
-
end
|
173
|
-
end }
|
174
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
175
|
-
it { should parse(' ').succeeding.like reference_parser }
|
176
|
-
end
|
177
|
-
|
178
|
-
context 'with one-or-more bounds' do
|
179
|
-
let(:grammar) { define_grammar do
|
180
|
-
rule :foo do
|
181
|
-
direct_action(repeat(/\w/, 1, nil), '|_| _.size')
|
182
|
-
end
|
183
|
-
end }
|
184
|
-
it { should parse('foo ').succeeding.like reference_parser }
|
185
|
-
it { should parse(' ').failing.like reference_parser }
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context 'with a nested list rule' do
|
190
|
-
let(:grammar) { define_grammar do
|
191
|
-
rule :foo do
|
192
|
-
direct_action(list(/\w+/, /,/, 1, nil), '|_| _.reduce(:+)')
|
193
|
-
end
|
194
|
-
end }
|
195
|
-
it { should parse('a,bc,d ').succeeding.like reference_parser }
|
196
|
-
it { should parse(' ').failing.like reference_parser }
|
197
|
-
end
|
198
|
-
|
199
|
-
context 'with a nested apply rule' do
|
200
|
-
let(:grammar) { define_grammar do
|
201
|
-
rule(:foo) { direct_action :digit, '|_| _.to_i' }
|
202
|
-
rule(:digit) { match /\d/ }
|
203
|
-
end }
|
204
|
-
it { should parse('451a').succeeding.twice.like reference_parser }
|
205
|
-
it { should parse(' ').failing.like reference_parser }
|
206
|
-
end
|
207
|
-
|
208
|
-
context 'with a nested token rule' do
|
209
|
-
let(:grammar) { define_grammar do
|
210
|
-
rule :foo do
|
211
|
-
direct_action(token(/\w+/), '|_| _.size')
|
212
|
-
end
|
213
|
-
end }
|
214
|
-
it { should parse('abc123').succeeding.like reference_parser }
|
215
|
-
it { should parse(' ').failing.like reference_parser }
|
216
|
-
end
|
217
|
-
|
218
|
-
context 'with a nested skip rule' do
|
219
|
-
let(:grammar) { define_grammar do
|
220
|
-
rule :foo do
|
221
|
-
direct_action(skip(/\w+/), '42' )
|
222
|
-
end
|
223
|
-
end }
|
224
|
-
it { should parse('abc123').succeeding.like reference_parser }
|
225
|
-
it { should parse(' ').failing.like reference_parser }
|
226
|
-
end
|
227
|
-
end
|