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,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
|
-
include Rattler::
|
3
|
+
include Rattler::Compiler::ParserGenerator
|
4
4
|
include Rattler::Parsers
|
5
5
|
|
6
6
|
describe BackReferenceGenerator do
|
@@ -9,7 +9,8 @@ describe BackReferenceGenerator do
|
|
9
9
|
|
10
10
|
let(:ref) { BackReference[:a] }
|
11
11
|
|
12
|
-
let(:scope) {
|
12
|
+
let(:scope) { ParserScope.new(bindings) }
|
13
|
+
let(:bindings) { {:a => 'r0_2'} }
|
13
14
|
|
14
15
|
describe '#gen_basic' do
|
15
16
|
|
@@ -62,60 +63,6 @@ describe BackReferenceGenerator do
|
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
65
|
-
describe '#gen_dispatch_action' do
|
66
|
-
|
67
|
-
let(:code) { NodeCode.new('Word', 'parsed') }
|
68
|
-
|
69
|
-
context 'when nested' do
|
70
|
-
it 'generates nested regex matching code with a dispatch action' do
|
71
|
-
nested_code {|g| g.gen_dispatch_action ref, code, scope }.
|
72
|
-
should == (<<-CODE).strip
|
73
|
-
begin
|
74
|
-
(r = @scanner.scan(/\#{r0_2}/)) &&
|
75
|
-
Word.parsed([r], :labeled => {:a => r0_2})
|
76
|
-
end
|
77
|
-
CODE
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
context 'when top-level' do
|
82
|
-
it 'generates top level regex matching code with a dispatch action' do
|
83
|
-
top_level_code {|g| g.gen_dispatch_action ref, code, scope }.
|
84
|
-
should == (<<-CODE).strip
|
85
|
-
(r = @scanner.scan(/\#{r0_2}/)) &&
|
86
|
-
Word.parsed([r], :labeled => {:a => r0_2})
|
87
|
-
CODE
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
describe '#gen_direct_action' do
|
93
|
-
|
94
|
-
let(:code) { ActionCode.new('|_| _.to_sym') }
|
95
|
-
|
96
|
-
context 'when nested' do
|
97
|
-
it 'generates nested regex matching code with a direct action' do
|
98
|
-
nested_code {|g| g.gen_direct_action ref, code, scope }.
|
99
|
-
should == (<<-CODE).strip
|
100
|
-
begin
|
101
|
-
(r = @scanner.scan(/\#{r0_2}/)) &&
|
102
|
-
(r.to_sym)
|
103
|
-
end
|
104
|
-
CODE
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'when top-level' do
|
109
|
-
it 'generates top level regex matching code with a direct action' do
|
110
|
-
top_level_code {|g| g.gen_direct_action ref, code, scope }.
|
111
|
-
should == (<<-CODE).strip
|
112
|
-
(r = @scanner.scan(/\#{r0_2}/)) &&
|
113
|
-
(r.to_sym)
|
114
|
-
CODE
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
66
|
describe '#gen_token' do
|
120
67
|
|
121
68
|
context 'when nested' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
|
-
include Rattler::
|
3
|
+
include Rattler::Compiler::ParserGenerator
|
4
4
|
include Rattler::Parsers
|
5
5
|
|
6
6
|
describe ChoiceGenerator do
|
@@ -88,68 +88,6 @@ end
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
describe '#gen_dispatch_action' do
|
92
|
-
|
93
|
-
let(:code) { NodeCode.new('Atom', 'parsed') }
|
94
|
-
|
95
|
-
context 'when nested' do
|
96
|
-
it 'generates nested choice matching code with a dispatch action' do
|
97
|
-
nested_code(:choice_level => 2) {|g| g.gen_dispatch_action choice, code }.
|
98
|
-
should == (<<-CODE).strip
|
99
|
-
begin
|
100
|
-
(r = begin
|
101
|
-
@scanner.scan(/[[:alpha:]]+/) ||
|
102
|
-
@scanner.scan(/[[:digit:]]+/)
|
103
|
-
end) && Atom.parsed([r])
|
104
|
-
end
|
105
|
-
CODE
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
context 'when top-level' do
|
110
|
-
it 'generates top-level choice matching code with a dispatch action' do
|
111
|
-
top_level_code(:choice_level => 0) {|g| g.gen_dispatch_action choice, code }.
|
112
|
-
should == (<<-CODE).strip
|
113
|
-
(r = begin
|
114
|
-
@scanner.scan(/[[:alpha:]]+/) ||
|
115
|
-
@scanner.scan(/[[:digit:]]+/)
|
116
|
-
end) && Atom.parsed([r])
|
117
|
-
CODE
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
describe '#gen_direct_action' do
|
123
|
-
|
124
|
-
let(:code) { ActionCode.new('|_| _.size') }
|
125
|
-
|
126
|
-
context 'when nested' do
|
127
|
-
it 'generates nested choice matching code with a direct action' do
|
128
|
-
nested_code(:choice_level => 2) {|g| g.gen_direct_action choice, code }.
|
129
|
-
should == (<<-CODE).strip
|
130
|
-
begin
|
131
|
-
(r = begin
|
132
|
-
@scanner.scan(/[[:alpha:]]+/) ||
|
133
|
-
@scanner.scan(/[[:digit:]]+/)
|
134
|
-
end) && (r.size)
|
135
|
-
end
|
136
|
-
CODE
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context 'when top-level' do
|
141
|
-
it 'generates nested choice matching code with a direct action' do
|
142
|
-
top_level_code(:choice_level => 0) {|g| g.gen_direct_action choice, code }.
|
143
|
-
should == (<<-CODE).strip
|
144
|
-
(r = begin
|
145
|
-
@scanner.scan(/[[:alpha:]]+/) ||
|
146
|
-
@scanner.scan(/[[:digit:]]+/)
|
147
|
-
end) && (r.size)
|
148
|
-
CODE
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
91
|
describe '#gen_token' do
|
154
92
|
|
155
93
|
context 'when nested' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
|
-
include Rattler::
|
3
|
+
include Rattler::Compiler::ParserGenerator
|
4
4
|
include Rattler::Parsers
|
5
5
|
|
6
6
|
describe DisallowGenerator do
|
@@ -58,60 +58,6 @@ describe DisallowGenerator do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
describe '#gen_dispatch_action' do
|
62
|
-
|
63
|
-
let(:code) { NodeCode.new('Word', 'parsed') }
|
64
|
-
|
65
|
-
context 'when nested' do
|
66
|
-
it 'generates nested negative lookahead code with a dispatch action' do
|
67
|
-
nested_code {|g| g.gen_dispatch_action disallow, code }.
|
68
|
-
should == (<<-CODE).strip
|
69
|
-
begin
|
70
|
-
@scanner.skip(/(?!\\d)/) &&
|
71
|
-
Word.parsed([])
|
72
|
-
end
|
73
|
-
CODE
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'when top-level' do
|
78
|
-
it 'generates top level negative lookahead code with a dispatch action' do
|
79
|
-
top_level_code {|g| g.gen_dispatch_action disallow, code }.
|
80
|
-
should == (<<-CODE).strip
|
81
|
-
@scanner.skip(/(?!\\d)/) &&
|
82
|
-
Word.parsed([])
|
83
|
-
CODE
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe '#gen_direct_action' do
|
89
|
-
|
90
|
-
let(:code) { ActionCode.new(':t') }
|
91
|
-
|
92
|
-
context 'when nested' do
|
93
|
-
it 'generates nested negative lookahead code with a direct action' do
|
94
|
-
nested_code {|g| g.gen_direct_action disallow, code }.
|
95
|
-
should == (<<-CODE).strip
|
96
|
-
begin
|
97
|
-
@scanner.skip(/(?!\\d)/) &&
|
98
|
-
(:t)
|
99
|
-
end
|
100
|
-
CODE
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context 'when top-level' do
|
105
|
-
it 'generates top level negative lookahead code with a direct action' do
|
106
|
-
top_level_code {|g| g.gen_direct_action disallow, code }.
|
107
|
-
should == (<<-CODE).strip
|
108
|
-
@scanner.skip(/(?!\\d)/) &&
|
109
|
-
(:t)
|
110
|
-
CODE
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
61
|
describe '#gen_token' do
|
116
62
|
|
117
63
|
context 'when nested' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
|
-
include Rattler::
|
3
|
+
include Rattler::Compiler::ParserGenerator
|
4
4
|
include Rattler::Parsers
|
5
5
|
|
6
6
|
describe ESymbolGenerator do
|
@@ -52,44 +52,6 @@ describe ESymbolGenerator do
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
describe '#gen_dispatch_action' do
|
56
|
-
|
57
|
-
let(:code) { NodeCode.new('Word', 'parsed') }
|
58
|
-
|
59
|
-
context 'when nested' do
|
60
|
-
it 'generates nested eof matching code with a dispatch action' do
|
61
|
-
nested_code {|g| g.gen_dispatch_action ESymbol[], code }.
|
62
|
-
should == 'Word.parsed([])'
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'when top-level' do
|
67
|
-
it 'generates top level eof matching code with a dispatch action' do
|
68
|
-
top_level_code {|g| g.gen_dispatch_action ESymbol[], code }.
|
69
|
-
should == 'Word.parsed([])'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#gen_direct_action' do
|
75
|
-
|
76
|
-
let(:code) { ActionCode.new(':foo') }
|
77
|
-
|
78
|
-
context 'when nested' do
|
79
|
-
it 'generates nested eof matching code with a direct action' do
|
80
|
-
nested_code {|g| g.gen_direct_action ESymbol[], code }.
|
81
|
-
should == '(:foo)'
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context 'when top-level' do
|
86
|
-
it 'generates top level eof matching code with a direct action' do
|
87
|
-
top_level_code {|g| g.gen_direct_action ESymbol[], code }.
|
88
|
-
should == ':foo'
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
55
|
describe '#gen_token' do
|
94
56
|
|
95
57
|
context 'when nested' do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
2
|
|
3
|
-
include Rattler::
|
3
|
+
include Rattler::Compiler::ParserGenerator
|
4
4
|
include Rattler::Parsers
|
5
5
|
|
6
6
|
describe EofGenerator do
|
@@ -52,44 +52,6 @@ describe EofGenerator do
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
describe '#gen_dispatch_action' do
|
56
|
-
|
57
|
-
let(:code) { NodeCode.new('Word', 'parsed') }
|
58
|
-
|
59
|
-
context 'when nested' do
|
60
|
-
it 'generates nested eof matching code with a dispatch action' do
|
61
|
-
nested_code {|g| g.gen_dispatch_action Eof[], code }.
|
62
|
-
should == '(Word.parsed([]) if @scanner.eos?)'
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
context 'when top-level' do
|
67
|
-
it 'generates top level eof matching code with a dispatch action' do
|
68
|
-
top_level_code {|g| g.gen_dispatch_action Eof[], code }.
|
69
|
-
should == 'Word.parsed([]) if @scanner.eos?'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
describe '#gen_direct_action' do
|
75
|
-
|
76
|
-
let(:code) { ActionCode.new(':eof') }
|
77
|
-
|
78
|
-
context 'when nested' do
|
79
|
-
it 'generates nested eof matching code with a direct action' do
|
80
|
-
nested_code {|g| g.gen_direct_action Eof[], code }.
|
81
|
-
should == '((:eof) if @scanner.eos?)'
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
context 'when top-level' do
|
86
|
-
it 'generates top level eof matching code with a direct action' do
|
87
|
-
top_level_code {|g| g.gen_direct_action Eof[], code }.
|
88
|
-
should == '(:eof) if @scanner.eos?'
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
55
|
describe '#gen_token' do
|
94
56
|
|
95
57
|
context 'when nested' do
|
@@ -2,27 +2,27 @@ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
|
2
2
|
|
3
3
|
include Rattler::Parsers
|
4
4
|
|
5
|
-
describe Rattler::
|
6
|
-
|
5
|
+
describe Rattler::Compiler::ParserGenerator::FailGenerator do
|
6
|
+
|
7
7
|
include ParserGeneratorSpecHelper
|
8
|
-
|
8
|
+
|
9
9
|
describe '#gen_basic' do
|
10
|
-
|
10
|
+
|
11
11
|
context 'when nested' do
|
12
12
|
context 'and fail type is :expr' do
|
13
|
-
|
13
|
+
|
14
14
|
let(:fail) { Fail[:expr, 'operator expected'] }
|
15
|
-
|
15
|
+
|
16
16
|
it 'generates a nested fail expression' do
|
17
17
|
nested_code {|g| g.gen_basic fail }.
|
18
18
|
should == '(fail! { "operator expected" })'
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
context 'and fail type is :rule' do
|
23
|
-
|
23
|
+
|
24
24
|
let(:fail) { Fail[:rule, 'identifier expected'] }
|
25
|
-
|
25
|
+
|
26
26
|
it 'generates a nested return statement returning a fail expression' do
|
27
27
|
nested_code {|g| g.gen_basic fail }.
|
28
28
|
should == (<<-CODE).strip
|
@@ -31,50 +31,121 @@ false
|
|
31
31
|
CODE
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
context 'and fail type is :parse' do
|
36
|
-
|
36
|
+
|
37
37
|
let(:fail) { Fail[:parse, 'unexpected operator'] }
|
38
|
-
|
38
|
+
|
39
39
|
it 'generates a nested fail_parse statement' do
|
40
40
|
nested_code {|g| g.gen_basic fail }.
|
41
41
|
should == '(fail_parse { "unexpected operator" })'
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
context 'when top-level' do
|
47
47
|
context 'and fail type is :expr' do
|
48
|
-
|
48
|
+
|
49
49
|
let(:fail) { Fail[:expr, 'operator expected'] }
|
50
|
-
|
50
|
+
|
51
51
|
it 'generates a top-level fail expression' do
|
52
52
|
top_level_code {|g| g.gen_basic fail }.
|
53
53
|
should == 'fail! { "operator expected" }'
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
context 'and fail type is :rule' do
|
58
|
-
|
58
|
+
|
59
59
|
let(:fail) { Fail[:rule, 'identifier expected'] }
|
60
|
-
|
60
|
+
|
61
61
|
it 'generates a return statement returning a fail expression' do
|
62
62
|
top_level_code {|g| g.gen_basic fail }.
|
63
63
|
should == 'return(fail! { "identifier expected" })'
|
64
64
|
end
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
context 'and fail type is :parse' do
|
68
|
-
|
68
|
+
|
69
69
|
let(:fail) { Fail[:parse, 'unexpected operator'] }
|
70
|
-
|
70
|
+
|
71
71
|
it 'generates a top-level fail_parse statement' do
|
72
72
|
top_level_code {|g| g.gen_basic fail }.
|
73
73
|
should == 'fail_parse { "unexpected operator" }'
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#gen_skip' do
|
81
|
+
|
82
|
+
context 'when nested' do
|
83
|
+
context 'and fail type is :expr' do
|
84
|
+
|
85
|
+
let(:fail) { Fail[:expr, 'operator expected'] }
|
86
|
+
|
87
|
+
it 'generates a nested fail expression' do
|
88
|
+
nested_code {|g| g.gen_skip fail }.
|
89
|
+
should == '(fail! { "operator expected" })'
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'and fail type is :rule' do
|
94
|
+
|
95
|
+
let(:fail) { Fail[:rule, 'identifier expected'] }
|
96
|
+
|
97
|
+
it 'generates a nested return statement returning a fail expression' do
|
98
|
+
nested_code {|g| g.gen_skip fail }.
|
99
|
+
should == (<<-CODE).strip
|
100
|
+
return(fail! { "identifier expected" })
|
101
|
+
false
|
102
|
+
CODE
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'and fail type is :parse' do
|
107
|
+
|
108
|
+
let(:fail) { Fail[:parse, 'unexpected operator'] }
|
109
|
+
|
110
|
+
it 'generates a nested fail_parse statement' do
|
111
|
+
nested_code {|g| g.gen_skip fail }.
|
112
|
+
should == '(fail_parse { "unexpected operator" })'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'when top-level' do
|
118
|
+
context 'and fail type is :expr' do
|
119
|
+
|
120
|
+
let(:fail) { Fail[:expr, 'operator expected'] }
|
121
|
+
|
122
|
+
it 'generates a top-level fail expression' do
|
123
|
+
top_level_code {|g| g.gen_skip fail }.
|
124
|
+
should == 'fail! { "operator expected" }'
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'and fail type is :rule' do
|
129
|
+
|
130
|
+
let(:fail) { Fail[:rule, 'identifier expected'] }
|
131
|
+
|
132
|
+
it 'generates a return statement returning a fail expression' do
|
133
|
+
top_level_code {|g| g.gen_skip fail }.
|
134
|
+
should == 'return(fail! { "identifier expected" })'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context 'and fail type is :parse' do
|
139
|
+
|
140
|
+
let(:fail) { Fail[:parse, 'unexpected operator'] }
|
141
|
+
|
142
|
+
it 'generates a top-level fail_parse statement' do
|
143
|
+
top_level_code {|g| g.gen_skip fail }.
|
144
|
+
should == 'fail_parse { "unexpected operator" }'
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
78
149
|
end
|
79
|
-
|
150
|
+
|
80
151
|
end
|