rattler 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. data/README.rdoc +57 -37
  2. data/features/command_line/dest_option.feature +8 -21
  3. data/features/command_line/lib_option.feature +37 -0
  4. data/features/command_line/parser_generator.feature +7 -4
  5. data/features/grammar/back_reference.feature +37 -0
  6. data/features/grammar/fail.feature +3 -3
  7. data/features/grammar/labels.feature +11 -3
  8. data/features/grammar/list_matching.feature +14 -5
  9. data/features/grammar/literal.feature +30 -4
  10. data/features/grammar/nonterminal.feature +1 -1
  11. data/features/grammar/ordered_choice.feature +2 -2
  12. data/features/grammar/skip_operator.feature +1 -1
  13. data/features/grammar/symantic_action.feature +7 -7
  14. data/features/grammar/whitespace.feature +2 -2
  15. data/features/step_definitions/grammar_steps.rb +2 -2
  16. data/lib/rattler/back_end.rb +1 -0
  17. data/lib/rattler/back_end/compiler.rb +19 -20
  18. data/lib/rattler/back_end/optimizer.rb +100 -0
  19. data/lib/rattler/back_end/optimizer/composite_reducing.rb +18 -0
  20. data/lib/rattler/back_end/optimizer/flatten_choice.rb +31 -0
  21. data/lib/rattler/back_end/optimizer/flatten_sequence.rb +59 -0
  22. data/lib/rattler/back_end/optimizer/flattening.rb +17 -0
  23. data/lib/rattler/back_end/optimizer/inline_regular_rules.rb +46 -0
  24. data/lib/rattler/back_end/optimizer/join_match_capturing_sequence.rb +71 -0
  25. data/lib/rattler/back_end/optimizer/join_match_choice.rb +37 -0
  26. data/lib/rattler/back_end/optimizer/join_match_matching_sequence.rb +38 -0
  27. data/lib/rattler/back_end/optimizer/join_match_sequence.rb +17 -0
  28. data/lib/rattler/back_end/optimizer/join_predicate_bare_match.rb +68 -0
  29. data/lib/rattler/back_end/optimizer/join_predicate_match.rb +17 -0
  30. data/lib/rattler/back_end/optimizer/join_predicate_nested_match.rb +37 -0
  31. data/lib/rattler/back_end/optimizer/join_predicate_or_bare_match.rb +68 -0
  32. data/lib/rattler/back_end/optimizer/join_predicate_or_match.rb +17 -0
  33. data/lib/rattler/back_end/optimizer/join_predicate_or_nested_match.rb +36 -0
  34. data/lib/rattler/back_end/optimizer/match_joining.rb +60 -0
  35. data/lib/rattler/back_end/optimizer/optimization.rb +94 -0
  36. data/lib/rattler/back_end/optimizer/optimization_context.rb +72 -0
  37. data/lib/rattler/back_end/optimizer/optimization_sequence.rb +37 -0
  38. data/lib/rattler/back_end/optimizer/optimize_children.rb +46 -0
  39. data/lib/rattler/back_end/optimizer/reduce_repeat_match.rb +44 -0
  40. data/lib/rattler/back_end/optimizer/remove_meaningless_wrapper.rb +32 -0
  41. data/lib/rattler/back_end/optimizer/simplify_redundant_repeat.rb +43 -0
  42. data/lib/rattler/back_end/optimizer/simplify_token_match.rb +38 -0
  43. data/lib/rattler/back_end/parser_generator.rb +21 -14
  44. data/lib/rattler/back_end/parser_generator/apply_generator.rb +35 -35
  45. data/lib/rattler/back_end/parser_generator/assert_generator.rb +29 -30
  46. data/lib/rattler/back_end/parser_generator/back_reference_generator.rb +93 -0
  47. data/lib/rattler/back_end/parser_generator/choice_generator.rb +33 -49
  48. data/lib/rattler/back_end/parser_generator/direct_action_generator.rb +14 -14
  49. data/lib/rattler/back_end/parser_generator/disallow_generator.rb +29 -30
  50. data/lib/rattler/back_end/parser_generator/dispatch_action_generator.rb +11 -13
  51. data/lib/rattler/back_end/parser_generator/expr_generator.rb +36 -56
  52. data/lib/rattler/back_end/parser_generator/fail_generator.rb +18 -18
  53. data/lib/rattler/back_end/parser_generator/group_match.rb +18 -0
  54. data/lib/rattler/back_end/parser_generator/group_match_generator.rb +76 -0
  55. data/lib/rattler/back_end/parser_generator/label_generator.rb +25 -6
  56. data/lib/rattler/back_end/parser_generator/list1_generator.rb +7 -7
  57. data/lib/rattler/back_end/parser_generator/list_generating.rb +19 -20
  58. data/lib/rattler/back_end/parser_generator/list_generator.rb +5 -5
  59. data/lib/rattler/back_end/parser_generator/match_generator.rb +52 -52
  60. data/lib/rattler/back_end/parser_generator/one_or_more_generator.rb +6 -6
  61. data/lib/rattler/back_end/parser_generator/optional_generator.rb +30 -29
  62. data/lib/rattler/back_end/parser_generator/predicate_propogating.rb +8 -8
  63. data/lib/rattler/back_end/parser_generator/repeat_generating.rb +23 -25
  64. data/lib/rattler/back_end/parser_generator/rule_generator.rb +27 -79
  65. data/lib/rattler/back_end/parser_generator/rule_set_generator.rb +102 -0
  66. data/lib/rattler/back_end/parser_generator/sequence_generator.rb +49 -41
  67. data/lib/rattler/back_end/parser_generator/skip_generator.rb +14 -20
  68. data/lib/rattler/back_end/parser_generator/skip_propogating.rb +4 -4
  69. data/lib/rattler/back_end/parser_generator/sub_generating.rb +6 -0
  70. data/lib/rattler/back_end/parser_generator/token_generator.rb +12 -12
  71. data/lib/rattler/back_end/parser_generator/token_propogating.rb +2 -2
  72. data/lib/rattler/back_end/parser_generator/zero_or_more_generator.rb +4 -4
  73. data/lib/rattler/grammar.rb +4 -3
  74. data/lib/rattler/grammar/analysis.rb +91 -0
  75. data/lib/rattler/grammar/grammar.rb +37 -25
  76. data/lib/rattler/grammar/grammar_parser.rb +19 -11
  77. data/lib/rattler/grammar/metagrammar.rb +569 -800
  78. data/lib/rattler/grammar/rattler.rtlr +162 -144
  79. data/lib/rattler/parsers.rb +5 -1
  80. data/lib/rattler/parsers/action_code.rb +29 -15
  81. data/lib/rattler/parsers/apply.rb +5 -5
  82. data/lib/rattler/parsers/assert.rb +4 -18
  83. data/lib/rattler/parsers/back_reference.rb +46 -0
  84. data/lib/rattler/parsers/choice.rb +6 -39
  85. data/lib/rattler/parsers/combinator_parser.rb +32 -0
  86. data/lib/rattler/parsers/combining.rb +3 -29
  87. data/lib/rattler/parsers/direct_action.rb +27 -30
  88. data/lib/rattler/parsers/disallow.rb +4 -18
  89. data/lib/rattler/parsers/dispatch_action.rb +30 -25
  90. data/lib/rattler/parsers/label.rb +9 -18
  91. data/lib/rattler/parsers/list.rb +3 -34
  92. data/lib/rattler/parsers/list1.rb +4 -36
  93. data/lib/rattler/parsers/list_parser.rb +64 -0
  94. data/lib/rattler/parsers/match.rb +7 -42
  95. data/lib/rattler/parsers/node_code.rb +44 -0
  96. data/lib/rattler/parsers/one_or_more.rb +7 -27
  97. data/lib/rattler/parsers/optional.rb +5 -25
  98. data/lib/rattler/parsers/parser.rb +16 -44
  99. data/lib/rattler/parsers/parser_dsl.rb +13 -3
  100. data/lib/rattler/parsers/predicate.rb +4 -12
  101. data/lib/rattler/parsers/rule.rb +18 -19
  102. data/lib/rattler/parsers/rule_set.rb +63 -0
  103. data/lib/rattler/parsers/sequence.rb +12 -46
  104. data/lib/rattler/parsers/skip.rb +12 -26
  105. data/lib/rattler/parsers/token.rb +6 -21
  106. data/lib/rattler/parsers/zero_or_more.rb +6 -26
  107. data/lib/rattler/runner.rb +66 -28
  108. data/lib/rattler/runtime/extended_packrat_parser.rb +26 -20
  109. data/lib/rattler/runtime/packrat_parser.rb +17 -21
  110. data/lib/rattler/runtime/parser.rb +12 -2
  111. data/lib/rattler/runtime/recursive_descent_parser.rb +3 -11
  112. data/lib/rattler/util.rb +2 -1
  113. data/lib/rattler/util/graphviz.rb +29 -0
  114. data/lib/rattler/util/graphviz/digraph_builder.rb +71 -0
  115. data/lib/rattler/util/graphviz/node_builder.rb +84 -0
  116. data/lib/rattler/util/node.rb +37 -19
  117. data/lib/rattler/util/parser_spec_helper.rb +61 -35
  118. data/spec/rattler/back_end/compiler_spec.rb +6 -860
  119. data/spec/rattler/back_end/optimizer/flatten_choice_spec.rb +70 -0
  120. data/spec/rattler/back_end/optimizer/flatten_sequence_spec.rb +130 -0
  121. data/spec/rattler/back_end/optimizer/inline_regular_rules_spec.rb +80 -0
  122. data/spec/rattler/back_end/optimizer/join_match_capturing_sequence_spec.rb +241 -0
  123. data/spec/rattler/back_end/optimizer/join_match_choice_spec.rb +100 -0
  124. data/spec/rattler/back_end/optimizer/join_match_matching_sequence_spec.rb +112 -0
  125. data/spec/rattler/back_end/optimizer/join_predicate_bare_match_spec.rb +194 -0
  126. data/spec/rattler/back_end/optimizer/join_predicate_nested_match_spec.rb +180 -0
  127. data/spec/rattler/back_end/optimizer/join_predicate_or_bare_match_spec.rb +153 -0
  128. data/spec/rattler/back_end/optimizer/join_predicate_or_nested_match_spec.rb +153 -0
  129. data/spec/rattler/back_end/optimizer/reduce_repeat_match_spec.rb +98 -0
  130. data/spec/rattler/back_end/optimizer/simplify_redundant_repeat_spec.rb +226 -0
  131. data/spec/rattler/back_end/optimizer/simplify_token_match_spec.rb +85 -0
  132. data/spec/rattler/back_end/parser_generator/apply_generator_spec.rb +38 -33
  133. data/spec/rattler/back_end/parser_generator/assert_generator_spec.rb +38 -33
  134. data/spec/rattler/back_end/parser_generator/back_reference_generator_spec.rb +181 -0
  135. data/spec/rattler/back_end/parser_generator/choice_generator_spec.rb +38 -33
  136. data/spec/rattler/back_end/parser_generator/direct_action_generator_spec.rb +38 -33
  137. data/spec/rattler/back_end/parser_generator/disallow_generator_spec.rb +38 -33
  138. data/spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb +38 -33
  139. data/spec/rattler/back_end/parser_generator/group_match_generator_spec.rb +185 -0
  140. data/spec/rattler/back_end/parser_generator/label_generator_spec.rb +38 -33
  141. data/spec/rattler/back_end/parser_generator/list1_generator_spec.rb +10 -5
  142. data/spec/rattler/back_end/parser_generator/list_generator_spec.rb +10 -5
  143. data/spec/rattler/back_end/parser_generator/match_generator_spec.rb +38 -33
  144. data/spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rb +38 -33
  145. data/spec/rattler/back_end/parser_generator/optional_generator_spec.rb +38 -33
  146. data/spec/rattler/back_end/parser_generator/rule_generator_spec.rb +13 -46
  147. data/spec/rattler/back_end/parser_generator/rule_set_generator_spec.rb +97 -0
  148. data/spec/rattler/back_end/parser_generator/sequence_generator_spec.rb +38 -33
  149. data/spec/rattler/back_end/parser_generator/skip_generator_spec.rb +38 -33
  150. data/spec/rattler/back_end/parser_generator/token_generator_spec.rb +38 -33
  151. data/spec/rattler/back_end/parser_generator/zero_or_more_generator_spec.rb +39 -34
  152. data/spec/rattler/back_end/shared_compiler_examples.rb +885 -0
  153. data/spec/rattler/grammar/analysis_spec.rb +167 -0
  154. data/spec/rattler/grammar/grammar_parser_spec.rb +169 -179
  155. data/spec/rattler/grammar/grammar_spec.rb +24 -21
  156. data/spec/rattler/parsers/action_code_spec.rb +64 -19
  157. data/spec/rattler/parsers/apply_spec.rb +9 -9
  158. data/spec/rattler/parsers/back_reference_spec.rb +38 -0
  159. data/spec/rattler/parsers/combinator_parser_spec.rb +14 -0
  160. data/spec/rattler/parsers/direct_action_spec.rb +16 -2
  161. data/spec/rattler/parsers/dispatch_action_spec.rb +15 -32
  162. data/spec/rattler/parsers/fail_spec.rb +6 -4
  163. data/spec/rattler/parsers/label_spec.rb +10 -28
  164. data/spec/rattler/parsers/node_code_spec.rb +48 -0
  165. data/spec/rattler/parsers/parser_dsl_spec.rb +1 -1
  166. data/spec/rattler/parsers/rule_set_spec.rb +35 -0
  167. data/spec/rattler/parsers/sequence_spec.rb +15 -24
  168. data/spec/rattler/runtime/extended_packrat_parser_spec.rb +22 -17
  169. data/spec/rattler/runtime/packrat_parser_spec.rb +1 -1
  170. data/spec/rattler/runtime/parse_node_spec.rb +15 -19
  171. data/spec/rattler/runtime/recursive_descent_parser_spec.rb +1 -1
  172. data/spec/rattler/runtime/shared_parser_examples.rb +61 -28
  173. data/spec/rattler/util/graphviz/node_builder_spec.rb +84 -0
  174. data/spec/rattler/util/node_spec.rb +92 -65
  175. data/spec/rattler_spec.rb +16 -16
  176. data/spec/support/combinator_parser_spec_helper.rb +19 -18
  177. data/spec/support/compiler_spec_helper.rb +56 -87
  178. data/spec/support/runtime_parser_spec_helper.rb +6 -14
  179. metadata +117 -22
  180. data/features/grammar/regex.feature +0 -24
  181. data/lib/rattler/parsers/match_joining.rb +0 -67
  182. data/lib/rattler/parsers/rules.rb +0 -43
@@ -1,56 +1,56 @@
1
1
  require 'rattler'
2
2
 
3
3
  describe 'Rattler' do
4
-
4
+
5
5
  describe '.define_rules' do
6
-
6
+
7
7
  context 'given a parser DSL block' do
8
-
8
+
9
9
  let(:result) { Rattler.define_rules do
10
10
  rule(:word) { match /\w+/ }
11
11
  rule(:num) { match /\d+/ }
12
12
  end }
13
-
13
+
14
14
  it 'returns a set of parse rules defined by the block' do
15
- result.should == Rattler::Parsers::Rules[
15
+ result.should == Rattler::Parsers::RuleSet[
16
16
  Rattler::Parsers::Rule[:word, Rattler::Parsers::Match[/\w+/]],
17
17
  Rattler::Parsers::Rule[:num, Rattler::Parsers::Match[/\d+/]]
18
18
  ]
19
19
  end
20
20
  end
21
21
  end
22
-
22
+
23
23
  describe '.compile_parser' do
24
-
24
+
25
25
  context 'given a parser DSL block' do
26
-
26
+
27
27
  let(:result) { Rattler.compile_parser do
28
28
  rule(:word) { match /\w+/ }
29
29
  rule(:num) { match /\d+/ }
30
30
  end }
31
-
31
+
32
32
  it 'returns a parser class with rule methods defined by the block' do
33
33
  result.should have_method(:match_word)
34
34
  result.should have_method(:match_num)
35
35
  end
36
36
  end
37
-
37
+
38
38
  context 'given a grammar source string' do
39
-
39
+
40
40
  let(:result) { Rattler.compile_parser({}, %{
41
- word <- /\w+/
42
- num <- /\d+/
41
+ word <- @WORD+
42
+ num <- @DIGIT+
43
43
  })}
44
-
44
+
45
45
  it 'returns a parser class with rule methods defined by the grammar' do
46
46
  result.should have_method(:match_word)
47
47
  result.should have_method(:match_num)
48
48
  end
49
49
  end
50
50
  end
51
-
51
+
52
52
  def have_method(rule_name)
53
53
  be_method_defined(rule_name)
54
54
  end
55
-
55
+
56
56
  end
@@ -4,48 +4,49 @@ include Rattler::Parsers
4
4
 
5
5
  module CombinatorParserSpecHelper
6
6
  include Rattler::Util::ParserSpecHelper
7
-
8
- @@default_rules = Rules[]
9
-
7
+
8
+ @@default_rules = RuleSet[]
9
+
10
10
  def rules
11
11
  @@default_rules
12
12
  end
13
-
13
+
14
+ def scope
15
+ {}
16
+ end
17
+
14
18
  def parser(&block)
15
19
  Rattler::Parsers::ParserBuilder.build(&block)
16
20
  end
17
-
21
+
18
22
  def parsing(source)
19
- CombinatorParsing.new(source, subject, rules)
23
+ CombinatorParsing.new(source, subject, rules, scope)
20
24
  end
21
-
25
+
22
26
  class CombinatorParsing
23
- def initialize(source, parser, rules)
27
+ def initialize(source, parser, rules, scope)
24
28
  @scanner = StringScanner.new(source)
25
29
  @parser = parser
26
30
  @rules = rules
31
+ @scope = scope
27
32
  end
28
33
  def at(pos)
29
34
  @scanner.pos = pos
30
35
  self
31
36
  end
32
- def labeled(arg={})
33
- @labeled = arg
34
- self
35
- end
36
37
  def result
37
- @result ||= if @labeled
38
- @parser.parse_labeled(@scanner, @rules, @labeled)
39
- else
40
- @parser.parse(@scanner, @rules)
41
- end
38
+ @new_scope = @scope
39
+ @result ||= @parser.parse(@scanner, @rules, @scope) {|_| @new_scope = _ }
42
40
  end
43
41
  def pos
44
42
  @scanner.pos
45
43
  end
44
+ def scope
45
+ @new_scope
46
+ end
46
47
  def failure
47
48
  !result
48
49
  end
49
50
  end
50
-
51
+
51
52
  end
@@ -1,100 +1,69 @@
1
1
  require 'strscan'
2
2
 
3
3
  module CompilerSpecHelper
4
-
5
- ParserBase = Rattler::Runtime::RecursiveDescentParser
6
-
7
- def define_parser(&block)
8
- Rattler::Parsers.define(&block)
9
- end
10
-
11
- def compile_parser(&block)
12
- Rattler::BackEnd::Compiler.
13
- compile_parser(ParserBase, define_parser(&block))
14
- end
15
-
16
- def compile(rules=nil, &block)
17
- Compile.new(rules || define_parser(&block))
18
- end
19
-
20
- class Compile
21
- def initialize(rules)
22
- @rules = rules
23
- end
24
- def description
25
- 'compile the parser'
26
- end
27
- def matches?(target)
28
- @compiled_parser = target.compile_parser(ParserBase, @rules)
29
- !@compiled_parser.nil?
30
- end
31
- def failure_message_for_should
32
- "expected Compiler to compile the parser"
33
- end
34
- def test_parsing(test_input)
35
- CompileTestParsing.new(@rules, test_input)
36
- end
4
+
5
+ def define_grammar(&block)
6
+ Rattler::Grammar::Grammar.new(Rattler::Parsers.define(&block))
37
7
  end
38
-
39
- class CompileTestParsing < Compile
40
- def initialize(rules, test_input)
41
- super rules
42
- @rule_name = @rules.first.name
43
- @repeat = 1
44
- @test_input = test_input
45
- end
46
- def description
47
- super + ' to equivalent parsing code'
48
- end
49
- def as(rule_name)
50
- @rule_name = rule_name
51
- self
8
+
9
+ RSpec::Matchers.define :parse do |source|
10
+ match do |parser_class|
11
+ parser = parser_class.new(source)
12
+ @repeat ||= 1
13
+ actual_results = (1..@repeat).map { parser.parse or false }
14
+ if @other_parser
15
+ expected_results = (1..@repeat).map { @other_parser.parse or false }
16
+ if mismatch = expected_results.zip(actual_results).find {|a, b| a != b }
17
+ @wrong_result = true
18
+ @expected_result, @actual_result = mismatch
19
+ end
20
+ @expected_pos = @other_parser.pos
21
+ @actual_pos = parser.pos
22
+ @wrong_pos = @expected_pos != @actual_pos
23
+ end
24
+ @wrong_fail = @should_succeed && actual_results.any? {|_| !_ }
25
+ @wrong_success = @should_fail && actual_results.any? {|_| _ }
26
+ not (@wrong_result or @wrong_fail or @wrong_success)
52
27
  end
53
- def twice
54
- repeating(2).times
28
+
29
+ chain :succeeding do |*args|
30
+ @repeat = args.shift unless args.empty?
31
+ @should_succeed = true
55
32
  end
56
- def repeating(n)
57
- @repeat = n
58
- self
33
+
34
+ chain :failing do
35
+ @should_fail = true
59
36
  end
60
- def times
61
- self
37
+
38
+ chain :like do |other_parser_class|
39
+ @other_parser = other_parser_class.new(source)
62
40
  end
63
- def matches?(target)
64
- if super
65
- scanner = StringScanner.new(@test_input)
66
- parser = @compiled_parser.new(@test_input)
67
- @repeat.times do
68
- @expected_result = normalize @rules[@rule_name].parse(scanner, @rules)
69
- @actual_result = normalize parser.match(@rule_name)
70
- @expected_pos = scanner.pos
71
- @actual_pos = parser.pos
72
- @correct_result = @expected_result == @actual_result
73
- @correct_pos = @expected_pos == @actual_pos
74
- return false unless @correct_result && @correct_pos
75
- end
76
- end
41
+
42
+ chain :twice do
43
+ @repeat = 2
77
44
  end
78
- def failure_message_for_should
79
- if @compiled_parser
80
- "parsing #{@test_input.inspect}\n" +
81
- if @correct_result
82
- "incorrect parse position\n" +
83
- "expected: #{@expected_pos}\n" +
84
- " got: #{@actual_pos}"
85
- else
86
- "incorrect result\n" +
87
- "expected: #{@expected_result.inspect}\n" +
88
- " got: #{@actual_result.inspect}"
89
- end
90
- else
91
- super
45
+
46
+ chain(:times) {} # syntactic sugar
47
+
48
+ failure_message_for_should do |parser_class|
49
+ m = "exected compiled parser to parse #{source.inspect}"
50
+ m << " like reference parser" if @other_parser
51
+ m << "\n"
52
+ if @wrong_result
53
+ m << "incorrect result\n" \
54
+ << "expected: #{@expected_result.inspect}\n" \
55
+ << " got: #{@actual_result.inspect}"
56
+ elsif @wrong_pos
57
+ m << "incorrect parse position\n" \
58
+ << "expected: #{@expected_pos}\n" \
59
+ << " got: #{@actual_pos}"
60
+ elsif @wrong_success
61
+ m << "expected parse to fail"
62
+ elsif @wrong_fail
63
+ m << "expected parse to succeed"
92
64
  end
93
- end
94
- private
95
- def normalize(result)
96
- result.nil? ? false : result
65
+ m
97
66
  end
98
67
  end
99
-
68
+
100
69
  end
@@ -1,18 +1,10 @@
1
1
  module RuntimeParserSpecHelper
2
-
2
+
3
3
  include Rattler::Util::ParserSpecHelper
4
-
5
- def given_rules(&block)
6
- GivenRules.new(Rattler.compile_parser({:class => described_class}, &block))
4
+
5
+ def define_grammar(*args, &block)
6
+ rules = Rattler::Parsers::ParserDSL.rules(*args, &block)
7
+ Rattler::Grammar::Grammar.new(rules)
7
8
  end
8
-
9
- class GivenRules
10
- def initialize(parser_class)
11
- @parser_class = parser_class
12
- end
13
- def parsing(source)
14
- Rattler::Util::ParserSpecHelper::Parsing.new(@parser_class.new(source))
15
- end
16
- end
17
-
9
+
18
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rattler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-02-24 00:00:00.000000000 -08:00
12
+ date: 2011-03-12 00:00:00.000000000 -08:00
13
13
  default_executable: rtlr
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
- requirement: &78063500 !ruby/object:Gem::Requirement
17
+ requirement: &74294690 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.0.0
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *78063500
25
+ version_requirements: *74294690
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: jeweler
28
- requirement: &78062620 !ruby/object:Gem::Requirement
28
+ requirement: &74294440 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.5.2
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *78062620
36
+ version_requirements: *74294440
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &78061750 !ruby/object:Gem::Requirement
39
+ requirement: &74268930 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 2.3.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *78061750
47
+ version_requirements: *74268930
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: cucumber
50
- requirement: &78061040 !ruby/object:Gem::Requirement
50
+ requirement: &74268690 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.8.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *78061040
58
+ version_requirements: *74268690
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: aruba
61
- requirement: &78060020 !ruby/object:Gem::Requirement
61
+ requirement: &74268420 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 0.3.0
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *78060020
69
+ version_requirements: *74268420
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: yard
72
- requirement: &78059060 !ruby/object:Gem::Requirement
72
+ requirement: &74268160 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 0.6.0
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *78059060
80
+ version_requirements: *74268160
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: watchr
83
- requirement: &77992410 !ruby/object:Gem::Requirement
83
+ requirement: &74267920 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,7 +88,18 @@ dependencies:
88
88
  version: 0.5.5
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *77992410
91
+ version_requirements: *74267920
92
+ - !ruby/object:Gem::Dependency
93
+ name: ruby-graphviz
94
+ requirement: &74267680 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: 0.9.6
100
+ type: :development
101
+ prerelease: false
102
+ version_requirements: *74267680
92
103
  description: Simple language recognition tool for Ruby based on packrat parsing
93
104
  email: jarhart@gmail.com
94
105
  executables:
@@ -102,9 +113,35 @@ files:
102
113
  - lib/rattler.rb
103
114
  - lib/rattler/back_end.rb
104
115
  - lib/rattler/back_end/compiler.rb
116
+ - lib/rattler/back_end/optimizer.rb
117
+ - lib/rattler/back_end/optimizer/composite_reducing.rb
118
+ - lib/rattler/back_end/optimizer/flatten_choice.rb
119
+ - lib/rattler/back_end/optimizer/flatten_sequence.rb
120
+ - lib/rattler/back_end/optimizer/flattening.rb
121
+ - lib/rattler/back_end/optimizer/inline_regular_rules.rb
122
+ - lib/rattler/back_end/optimizer/join_match_capturing_sequence.rb
123
+ - lib/rattler/back_end/optimizer/join_match_choice.rb
124
+ - lib/rattler/back_end/optimizer/join_match_matching_sequence.rb
125
+ - lib/rattler/back_end/optimizer/join_match_sequence.rb
126
+ - lib/rattler/back_end/optimizer/join_predicate_bare_match.rb
127
+ - lib/rattler/back_end/optimizer/join_predicate_match.rb
128
+ - lib/rattler/back_end/optimizer/join_predicate_nested_match.rb
129
+ - lib/rattler/back_end/optimizer/join_predicate_or_bare_match.rb
130
+ - lib/rattler/back_end/optimizer/join_predicate_or_match.rb
131
+ - lib/rattler/back_end/optimizer/join_predicate_or_nested_match.rb
132
+ - lib/rattler/back_end/optimizer/match_joining.rb
133
+ - lib/rattler/back_end/optimizer/optimization.rb
134
+ - lib/rattler/back_end/optimizer/optimization_context.rb
135
+ - lib/rattler/back_end/optimizer/optimization_sequence.rb
136
+ - lib/rattler/back_end/optimizer/optimize_children.rb
137
+ - lib/rattler/back_end/optimizer/reduce_repeat_match.rb
138
+ - lib/rattler/back_end/optimizer/remove_meaningless_wrapper.rb
139
+ - lib/rattler/back_end/optimizer/simplify_redundant_repeat.rb
140
+ - lib/rattler/back_end/optimizer/simplify_token_match.rb
105
141
  - lib/rattler/back_end/parser_generator.rb
106
142
  - lib/rattler/back_end/parser_generator/apply_generator.rb
107
143
  - lib/rattler/back_end/parser_generator/assert_generator.rb
144
+ - lib/rattler/back_end/parser_generator/back_reference_generator.rb
108
145
  - lib/rattler/back_end/parser_generator/choice_generator.rb
109
146
  - lib/rattler/back_end/parser_generator/direct_action_generator.rb
110
147
  - lib/rattler/back_end/parser_generator/disallow_generator.rb
@@ -112,6 +149,8 @@ files:
112
149
  - lib/rattler/back_end/parser_generator/expr_generator.rb
113
150
  - lib/rattler/back_end/parser_generator/fail_generator.rb
114
151
  - lib/rattler/back_end/parser_generator/gen_method_names.rb
152
+ - lib/rattler/back_end/parser_generator/group_match.rb
153
+ - lib/rattler/back_end/parser_generator/group_match_generator.rb
115
154
  - lib/rattler/back_end/parser_generator/label_generator.rb
116
155
  - lib/rattler/back_end/parser_generator/list1_generator.rb
117
156
  - lib/rattler/back_end/parser_generator/list_generating.rb
@@ -123,6 +162,7 @@ files:
123
162
  - lib/rattler/back_end/parser_generator/predicate_propogating.rb
124
163
  - lib/rattler/back_end/parser_generator/repeat_generating.rb
125
164
  - lib/rattler/back_end/parser_generator/rule_generator.rb
165
+ - lib/rattler/back_end/parser_generator/rule_set_generator.rb
126
166
  - lib/rattler/back_end/parser_generator/sequence_generator.rb
127
167
  - lib/rattler/back_end/parser_generator/skip_generator.rb
128
168
  - lib/rattler/back_end/parser_generator/skip_propogating.rb
@@ -133,6 +173,7 @@ files:
133
173
  - lib/rattler/back_end/parser_generator/zero_or_more_generator.rb
134
174
  - lib/rattler/back_end/ruby_generator.rb
135
175
  - lib/rattler/grammar.rb
176
+ - lib/rattler/grammar/analysis.rb
136
177
  - lib/rattler/grammar/grammar.rb
137
178
  - lib/rattler/grammar/grammar_dsl.rb
138
179
  - lib/rattler/grammar/grammar_parser.rb
@@ -142,7 +183,9 @@ files:
142
183
  - lib/rattler/parsers/action_code.rb
143
184
  - lib/rattler/parsers/apply.rb
144
185
  - lib/rattler/parsers/assert.rb
186
+ - lib/rattler/parsers/back_reference.rb
145
187
  - lib/rattler/parsers/choice.rb
188
+ - lib/rattler/parsers/combinator_parser.rb
146
189
  - lib/rattler/parsers/combining.rb
147
190
  - lib/rattler/parsers/direct_action.rb
148
191
  - lib/rattler/parsers/disallow.rb
@@ -152,15 +195,16 @@ files:
152
195
  - lib/rattler/parsers/label.rb
153
196
  - lib/rattler/parsers/list.rb
154
197
  - lib/rattler/parsers/list1.rb
198
+ - lib/rattler/parsers/list_parser.rb
155
199
  - lib/rattler/parsers/match.rb
156
- - lib/rattler/parsers/match_joining.rb
200
+ - lib/rattler/parsers/node_code.rb
157
201
  - lib/rattler/parsers/one_or_more.rb
158
202
  - lib/rattler/parsers/optional.rb
159
203
  - lib/rattler/parsers/parser.rb
160
204
  - lib/rattler/parsers/parser_dsl.rb
161
205
  - lib/rattler/parsers/predicate.rb
162
206
  - lib/rattler/parsers/rule.rb
163
- - lib/rattler/parsers/rules.rb
207
+ - lib/rattler/parsers/rule_set.rb
164
208
  - lib/rattler/parsers/sequence.rb
165
209
  - lib/rattler/parsers/skip.rb
166
210
  - lib/rattler/parsers/token.rb
@@ -176,15 +220,20 @@ files:
176
220
  - lib/rattler/runtime/recursive_descent_parser.rb
177
221
  - lib/rattler/runtime/syntax_error.rb
178
222
  - lib/rattler/util.rb
223
+ - lib/rattler/util/graphviz.rb
224
+ - lib/rattler/util/graphviz/digraph_builder.rb
225
+ - lib/rattler/util/graphviz/node_builder.rb
179
226
  - lib/rattler/util/line_counter.rb
180
227
  - lib/rattler/util/node.rb
181
228
  - lib/rattler/util/parser_spec_helper.rb
182
229
  - LICENSE.txt
183
230
  - README.rdoc
184
231
  - features/command_line/dest_option.feature
232
+ - features/command_line/lib_option.feature
185
233
  - features/command_line/output_option.feature
186
234
  - features/command_line/parser_generator.feature
187
235
  - features/grammar/any_character.feature
236
+ - features/grammar/back_reference.feature
188
237
  - features/grammar/character_class.feature
189
238
  - features/grammar/comments.feature
190
239
  - features/grammar/eof.feature
@@ -200,7 +249,6 @@ files:
200
249
  - features/grammar/ordered_choice.feature
201
250
  - features/grammar/positive_lookahead.feature
202
251
  - features/grammar/posix_class.feature
203
- - features/grammar/regex.feature
204
252
  - features/grammar/sequence.feature
205
253
  - features/grammar/skip_operator.feature
206
254
  - features/grammar/start_rule.feature
@@ -213,13 +261,28 @@ files:
213
261
  - features/step_definitions/grammar_steps.rb
214
262
  - features/support/env.rb
215
263
  - spec/rattler/back_end/compiler_spec.rb
264
+ - spec/rattler/back_end/optimizer/flatten_choice_spec.rb
265
+ - spec/rattler/back_end/optimizer/flatten_sequence_spec.rb
266
+ - spec/rattler/back_end/optimizer/inline_regular_rules_spec.rb
267
+ - spec/rattler/back_end/optimizer/join_match_capturing_sequence_spec.rb
268
+ - spec/rattler/back_end/optimizer/join_match_choice_spec.rb
269
+ - spec/rattler/back_end/optimizer/join_match_matching_sequence_spec.rb
270
+ - spec/rattler/back_end/optimizer/join_predicate_bare_match_spec.rb
271
+ - spec/rattler/back_end/optimizer/join_predicate_nested_match_spec.rb
272
+ - spec/rattler/back_end/optimizer/join_predicate_or_bare_match_spec.rb
273
+ - spec/rattler/back_end/optimizer/join_predicate_or_nested_match_spec.rb
274
+ - spec/rattler/back_end/optimizer/reduce_repeat_match_spec.rb
275
+ - spec/rattler/back_end/optimizer/simplify_redundant_repeat_spec.rb
276
+ - spec/rattler/back_end/optimizer/simplify_token_match_spec.rb
216
277
  - spec/rattler/back_end/parser_generator/apply_generator_spec.rb
217
278
  - spec/rattler/back_end/parser_generator/assert_generator_spec.rb
279
+ - spec/rattler/back_end/parser_generator/back_reference_generator_spec.rb
218
280
  - spec/rattler/back_end/parser_generator/choice_generator_spec.rb
219
281
  - spec/rattler/back_end/parser_generator/direct_action_generator_spec.rb
220
282
  - spec/rattler/back_end/parser_generator/disallow_generator_spec.rb
221
283
  - spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb
222
284
  - spec/rattler/back_end/parser_generator/fail_generator_spec.rb
285
+ - spec/rattler/back_end/parser_generator/group_match_generator_spec.rb
223
286
  - spec/rattler/back_end/parser_generator/label_generator_spec.rb
224
287
  - spec/rattler/back_end/parser_generator/list1_generator_spec.rb
225
288
  - spec/rattler/back_end/parser_generator/list_generator_spec.rb
@@ -227,17 +290,22 @@ files:
227
290
  - spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rb
228
291
  - spec/rattler/back_end/parser_generator/optional_generator_spec.rb
229
292
  - spec/rattler/back_end/parser_generator/rule_generator_spec.rb
293
+ - spec/rattler/back_end/parser_generator/rule_set_generator_spec.rb
230
294
  - spec/rattler/back_end/parser_generator/sequence_generator_spec.rb
231
295
  - spec/rattler/back_end/parser_generator/skip_generator_spec.rb
232
296
  - spec/rattler/back_end/parser_generator/token_generator_spec.rb
233
297
  - spec/rattler/back_end/parser_generator/zero_or_more_generator_spec.rb
234
298
  - spec/rattler/back_end/ruby_generator_spec.rb
299
+ - spec/rattler/back_end/shared_compiler_examples.rb
300
+ - spec/rattler/grammar/analysis_spec.rb
235
301
  - spec/rattler/grammar/grammar_parser_spec.rb
236
302
  - spec/rattler/grammar/grammar_spec.rb
237
303
  - spec/rattler/parsers/action_code_spec.rb
238
304
  - spec/rattler/parsers/apply_spec.rb
239
305
  - spec/rattler/parsers/assert_spec.rb
306
+ - spec/rattler/parsers/back_reference_spec.rb
240
307
  - spec/rattler/parsers/choice_spec.rb
308
+ - spec/rattler/parsers/combinator_parser_spec.rb
241
309
  - spec/rattler/parsers/direct_action_spec.rb
242
310
  - spec/rattler/parsers/disallow_spec.rb
243
311
  - spec/rattler/parsers/dispatch_action_spec.rb
@@ -247,9 +315,11 @@ files:
247
315
  - spec/rattler/parsers/list1_spec.rb
248
316
  - spec/rattler/parsers/list_spec.rb
249
317
  - spec/rattler/parsers/match_spec.rb
318
+ - spec/rattler/parsers/node_code_spec.rb
250
319
  - spec/rattler/parsers/one_or_more_spec.rb
251
320
  - spec/rattler/parsers/optional_spec.rb
252
321
  - spec/rattler/parsers/parser_dsl_spec.rb
322
+ - spec/rattler/parsers/rule_set_spec.rb
253
323
  - spec/rattler/parsers/sequence_spec.rb
254
324
  - spec/rattler/parsers/skip_spec.rb
255
325
  - spec/rattler/parsers/token_spec.rb
@@ -261,6 +331,7 @@ files:
261
331
  - spec/rattler/runtime/parser_spec.rb
262
332
  - spec/rattler/runtime/recursive_descent_parser_spec.rb
263
333
  - spec/rattler/runtime/shared_parser_examples.rb
334
+ - spec/rattler/util/graphviz/node_builder_spec.rb
264
335
  - spec/rattler/util/line_counter_spec.rb
265
336
  - spec/rattler/util/node_spec.rb
266
337
  - spec/rattler_spec.rb
@@ -285,7 +356,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
285
356
  version: '0'
286
357
  segments:
287
358
  - 0
288
- hash: -628641389
359
+ hash: -463546417
289
360
  required_rubygems_version: !ruby/object:Gem::Requirement
290
361
  none: false
291
362
  requirements:
@@ -294,15 +365,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
294
365
  version: '0'
295
366
  requirements: []
296
367
  rubyforge_project:
297
- rubygems_version: 1.5.2
368
+ rubygems_version: 1.5.3
298
369
  signing_key:
299
370
  specification_version: 3
300
371
  summary: Ruby Tool for Language Recognition
301
372
  test_files:
302
373
  - features/command_line/dest_option.feature
374
+ - features/command_line/lib_option.feature
303
375
  - features/command_line/output_option.feature
304
376
  - features/command_line/parser_generator.feature
305
377
  - features/grammar/any_character.feature
378
+ - features/grammar/back_reference.feature
306
379
  - features/grammar/character_class.feature
307
380
  - features/grammar/comments.feature
308
381
  - features/grammar/eof.feature
@@ -318,7 +391,6 @@ test_files:
318
391
  - features/grammar/ordered_choice.feature
319
392
  - features/grammar/positive_lookahead.feature
320
393
  - features/grammar/posix_class.feature
321
- - features/grammar/regex.feature
322
394
  - features/grammar/sequence.feature
323
395
  - features/grammar/skip_operator.feature
324
396
  - features/grammar/start_rule.feature
@@ -331,13 +403,28 @@ test_files:
331
403
  - features/step_definitions/grammar_steps.rb
332
404
  - features/support/env.rb
333
405
  - spec/rattler/back_end/compiler_spec.rb
406
+ - spec/rattler/back_end/optimizer/flatten_choice_spec.rb
407
+ - spec/rattler/back_end/optimizer/flatten_sequence_spec.rb
408
+ - spec/rattler/back_end/optimizer/inline_regular_rules_spec.rb
409
+ - spec/rattler/back_end/optimizer/join_match_capturing_sequence_spec.rb
410
+ - spec/rattler/back_end/optimizer/join_match_choice_spec.rb
411
+ - spec/rattler/back_end/optimizer/join_match_matching_sequence_spec.rb
412
+ - spec/rattler/back_end/optimizer/join_predicate_bare_match_spec.rb
413
+ - spec/rattler/back_end/optimizer/join_predicate_nested_match_spec.rb
414
+ - spec/rattler/back_end/optimizer/join_predicate_or_bare_match_spec.rb
415
+ - spec/rattler/back_end/optimizer/join_predicate_or_nested_match_spec.rb
416
+ - spec/rattler/back_end/optimizer/reduce_repeat_match_spec.rb
417
+ - spec/rattler/back_end/optimizer/simplify_redundant_repeat_spec.rb
418
+ - spec/rattler/back_end/optimizer/simplify_token_match_spec.rb
334
419
  - spec/rattler/back_end/parser_generator/apply_generator_spec.rb
335
420
  - spec/rattler/back_end/parser_generator/assert_generator_spec.rb
421
+ - spec/rattler/back_end/parser_generator/back_reference_generator_spec.rb
336
422
  - spec/rattler/back_end/parser_generator/choice_generator_spec.rb
337
423
  - spec/rattler/back_end/parser_generator/direct_action_generator_spec.rb
338
424
  - spec/rattler/back_end/parser_generator/disallow_generator_spec.rb
339
425
  - spec/rattler/back_end/parser_generator/dispatch_action_generator_spec.rb
340
426
  - spec/rattler/back_end/parser_generator/fail_generator_spec.rb
427
+ - spec/rattler/back_end/parser_generator/group_match_generator_spec.rb
341
428
  - spec/rattler/back_end/parser_generator/label_generator_spec.rb
342
429
  - spec/rattler/back_end/parser_generator/list1_generator_spec.rb
343
430
  - spec/rattler/back_end/parser_generator/list_generator_spec.rb
@@ -345,17 +432,22 @@ test_files:
345
432
  - spec/rattler/back_end/parser_generator/one_or_more_generator_spec.rb
346
433
  - spec/rattler/back_end/parser_generator/optional_generator_spec.rb
347
434
  - spec/rattler/back_end/parser_generator/rule_generator_spec.rb
435
+ - spec/rattler/back_end/parser_generator/rule_set_generator_spec.rb
348
436
  - spec/rattler/back_end/parser_generator/sequence_generator_spec.rb
349
437
  - spec/rattler/back_end/parser_generator/skip_generator_spec.rb
350
438
  - spec/rattler/back_end/parser_generator/token_generator_spec.rb
351
439
  - spec/rattler/back_end/parser_generator/zero_or_more_generator_spec.rb
352
440
  - spec/rattler/back_end/ruby_generator_spec.rb
441
+ - spec/rattler/back_end/shared_compiler_examples.rb
442
+ - spec/rattler/grammar/analysis_spec.rb
353
443
  - spec/rattler/grammar/grammar_parser_spec.rb
354
444
  - spec/rattler/grammar/grammar_spec.rb
355
445
  - spec/rattler/parsers/action_code_spec.rb
356
446
  - spec/rattler/parsers/apply_spec.rb
357
447
  - spec/rattler/parsers/assert_spec.rb
448
+ - spec/rattler/parsers/back_reference_spec.rb
358
449
  - spec/rattler/parsers/choice_spec.rb
450
+ - spec/rattler/parsers/combinator_parser_spec.rb
359
451
  - spec/rattler/parsers/direct_action_spec.rb
360
452
  - spec/rattler/parsers/disallow_spec.rb
361
453
  - spec/rattler/parsers/dispatch_action_spec.rb
@@ -365,9 +457,11 @@ test_files:
365
457
  - spec/rattler/parsers/list1_spec.rb
366
458
  - spec/rattler/parsers/list_spec.rb
367
459
  - spec/rattler/parsers/match_spec.rb
460
+ - spec/rattler/parsers/node_code_spec.rb
368
461
  - spec/rattler/parsers/one_or_more_spec.rb
369
462
  - spec/rattler/parsers/optional_spec.rb
370
463
  - spec/rattler/parsers/parser_dsl_spec.rb
464
+ - spec/rattler/parsers/rule_set_spec.rb
371
465
  - spec/rattler/parsers/sequence_spec.rb
372
466
  - spec/rattler/parsers/skip_spec.rb
373
467
  - spec/rattler/parsers/token_spec.rb
@@ -379,6 +473,7 @@ test_files:
379
473
  - spec/rattler/runtime/parser_spec.rb
380
474
  - spec/rattler/runtime/recursive_descent_parser_spec.rb
381
475
  - spec/rattler/runtime/shared_parser_examples.rb
476
+ - spec/rattler/util/graphviz/node_builder_spec.rb
382
477
  - spec/rattler/util/line_counter_spec.rb
383
478
  - spec/rattler/util/node_spec.rb
384
479
  - spec/rattler_spec.rb