rley 0.7.07 → 0.7.08

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 (139) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +348 -54
  3. data/LICENSE.txt +1 -1
  4. data/README.md +3 -2
  5. data/examples/NLP/engtagger.rb +193 -190
  6. data/examples/NLP/nano_eng/nano_grammar.rb +5 -5
  7. data/examples/data_formats/JSON/cli_options.rb +1 -1
  8. data/examples/data_formats/JSON/json_ast_builder.rb +12 -9
  9. data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
  10. data/examples/data_formats/JSON/json_grammar.rb +2 -2
  11. data/examples/data_formats/JSON/json_lexer.rb +8 -8
  12. data/examples/data_formats/JSON/json_minifier.rb +1 -1
  13. data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
  14. data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
  15. data/examples/general/calc_iter1/calc_grammar.rb +2 -2
  16. data/examples/general/calc_iter1/calc_lexer.rb +6 -4
  17. data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
  18. data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
  19. data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
  20. data/examples/general/calc_iter2/calc_grammar.rb +3 -3
  21. data/examples/general/calc_iter2/calc_lexer.rb +11 -10
  22. data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
  23. data/examples/general/left.rb +2 -2
  24. data/examples/general/right.rb +2 -2
  25. data/lib/rley/base/dotted_item.rb +23 -31
  26. data/lib/rley/constants.rb +2 -2
  27. data/lib/rley/engine.rb +20 -23
  28. data/lib/rley/formatter/asciitree.rb +3 -3
  29. data/lib/rley/formatter/bracket_notation.rb +1 -8
  30. data/lib/rley/formatter/debug.rb +6 -6
  31. data/lib/rley/formatter/json.rb +2 -2
  32. data/lib/rley/gfg/call_edge.rb +1 -1
  33. data/lib/rley/gfg/edge.rb +5 -5
  34. data/lib/rley/gfg/end_vertex.rb +2 -6
  35. data/lib/rley/gfg/epsilon_edge.rb +1 -5
  36. data/lib/rley/gfg/grm_flow_graph.rb +27 -23
  37. data/lib/rley/gfg/item_vertex.rb +10 -10
  38. data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
  39. data/lib/rley/gfg/scan_edge.rb +1 -1
  40. data/lib/rley/gfg/shortcut_edge.rb +2 -2
  41. data/lib/rley/gfg/start_vertex.rb +4 -8
  42. data/lib/rley/gfg/vertex.rb +43 -39
  43. data/lib/rley/lexical/token_range.rb +6 -6
  44. data/lib/rley/parse_forest_visitor.rb +5 -5
  45. data/lib/rley/parse_rep/ast_base_builder.rb +9 -11
  46. data/lib/rley/parse_rep/cst_builder.rb +5 -6
  47. data/lib/rley/parse_rep/parse_forest_builder.rb +20 -18
  48. data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
  49. data/lib/rley/parse_rep/parse_rep_creator.rb +11 -13
  50. data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
  51. data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
  52. data/lib/rley/parse_tree_visitor.rb +1 -1
  53. data/lib/rley/parser/error_reason.rb +4 -5
  54. data/lib/rley/parser/gfg_chart.rb +20 -22
  55. data/lib/rley/parser/gfg_parsing.rb +16 -30
  56. data/lib/rley/parser/parse_entry.rb +25 -31
  57. data/lib/rley/parser/parse_entry_set.rb +18 -15
  58. data/lib/rley/parser/parse_entry_tracker.rb +4 -4
  59. data/lib/rley/parser/parse_state.rb +16 -21
  60. data/lib/rley/parser/parse_state_tracker.rb +4 -4
  61. data/lib/rley/parser/parse_tracer.rb +13 -13
  62. data/lib/rley/parser/parse_walker_factory.rb +23 -28
  63. data/lib/rley/parser/state_set.rb +9 -10
  64. data/lib/rley/ptree/non_terminal_node.rb +7 -5
  65. data/lib/rley/ptree/parse_tree.rb +3 -3
  66. data/lib/rley/ptree/parse_tree_node.rb +5 -5
  67. data/lib/rley/ptree/terminal_node.rb +7 -7
  68. data/lib/rley/rley_error.rb +12 -12
  69. data/lib/rley/sppf/alternative_node.rb +6 -6
  70. data/lib/rley/sppf/composite_node.rb +7 -7
  71. data/lib/rley/sppf/epsilon_node.rb +3 -3
  72. data/lib/rley/sppf/leaf_node.rb +3 -3
  73. data/lib/rley/sppf/parse_forest.rb +16 -16
  74. data/lib/rley/sppf/sppf_node.rb +7 -8
  75. data/lib/rley/sppf/token_node.rb +3 -3
  76. data/lib/rley/syntax/grammar.rb +5 -5
  77. data/lib/rley/syntax/grammar_builder.rb +9 -9
  78. data/lib/rley/syntax/grm_symbol.rb +6 -6
  79. data/lib/rley/syntax/non_terminal.rb +9 -15
  80. data/lib/rley/syntax/production.rb +10 -10
  81. data/lib/rley/syntax/symbol_seq.rb +7 -9
  82. data/lib/rley/syntax/terminal.rb +4 -5
  83. data/lib/rley/syntax/verbatim_symbol.rb +3 -3
  84. data/lib/support/base_tokenizer.rb +19 -18
  85. data/spec/rley/base/dotted_item_spec.rb +2 -2
  86. data/spec/rley/engine_spec.rb +17 -15
  87. data/spec/rley/formatter/asciitree_spec.rb +7 -7
  88. data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
  89. data/spec/rley/formatter/json_spec.rb +1 -1
  90. data/spec/rley/gfg/end_vertex_spec.rb +5 -5
  91. data/spec/rley/gfg/item_vertex_spec.rb +10 -10
  92. data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
  93. data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
  94. data/spec/rley/gfg/start_vertex_spec.rb +5 -5
  95. data/spec/rley/gfg/vertex_spec.rb +3 -3
  96. data/spec/rley/lexical/token_range_spec.rb +16 -16
  97. data/spec/rley/lexical/token_spec.rb +2 -2
  98. data/spec/rley/parse_forest_visitor_spec.rb +165 -163
  99. data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
  100. data/spec/rley/parse_rep/ast_builder_spec.rb +6 -6
  101. data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
  102. data/spec/rley/parse_rep/groucho_spec.rb +21 -21
  103. data/spec/rley/parse_rep/parse_forest_builder_spec.rb +26 -26
  104. data/spec/rley/parse_rep/parse_forest_factory_spec.rb +6 -6
  105. data/spec/rley/parse_rep/parse_tree_factory_spec.rb +2 -2
  106. data/spec/rley/parse_tree_visitor_spec.rb +10 -8
  107. data/spec/rley/parser/error_reason_spec.rb +6 -6
  108. data/spec/rley/parser/gfg_earley_parser_spec.rb +4 -2
  109. data/spec/rley/parser/gfg_parsing_spec.rb +4 -8
  110. data/spec/rley/parser/parse_entry_spec.rb +19 -19
  111. data/spec/rley/parser/parse_state_spec.rb +5 -5
  112. data/spec/rley/parser/parse_walker_factory_spec.rb +1 -1
  113. data/spec/rley/parser/state_set_spec.rb +22 -22
  114. data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
  115. data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
  116. data/spec/rley/ptree/terminal_node_spec.rb +6 -6
  117. data/spec/rley/sppf/alternative_node_spec.rb +6 -6
  118. data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
  119. data/spec/rley/sppf/token_node_spec.rb +4 -4
  120. data/spec/rley/support/ambiguous_grammar_helper.rb +3 -4
  121. data/spec/rley/support/grammar_abc_helper.rb +2 -4
  122. data/spec/rley/support/grammar_ambig01_helper.rb +4 -5
  123. data/spec/rley/support/grammar_arr_int_helper.rb +4 -5
  124. data/spec/rley/support/grammar_b_expr_helper.rb +4 -5
  125. data/spec/rley/support/grammar_l0_helper.rb +10 -11
  126. data/spec/rley/support/grammar_pb_helper.rb +6 -5
  127. data/spec/rley/support/grammar_sppf_helper.rb +1 -1
  128. data/spec/rley/syntax/grammar_builder_spec.rb +5 -5
  129. data/spec/rley/syntax/grammar_spec.rb +6 -6
  130. data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
  131. data/spec/rley/syntax/non_terminal_spec.rb +8 -8
  132. data/spec/rley/syntax/production_spec.rb +13 -13
  133. data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
  134. data/spec/rley/syntax/terminal_spec.rb +5 -5
  135. data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
  136. data/spec/spec_helper.rb +0 -12
  137. data/spec/support/base_tokenizer_spec.rb +7 -2
  138. metadata +21 -62
  139. data/.simplecov +0 -8
@@ -15,13 +15,13 @@ module Rley # This module is used as a namespace
15
15
  def builder(aParseResult, _builder = nil)
16
16
  ParseForestBuilder.new(aParseResult.tokens)
17
17
  end
18
-
18
+
19
19
  # When an end vertex is re-visited then jump
20
20
  # its corresponding start vertex. This behaviour
21
21
  # makes sense for sharing nodes.
22
- def jump_to_start()
22
+ def jump_to_start
23
23
  true
24
- end
24
+ end
25
25
  end # class
26
26
  end # module
27
27
  end # module
@@ -7,18 +7,18 @@ module Rley # This module is used as a namespace
7
7
  # Utility class that helps to create a representation of a parse from
8
8
  # a given Parsing object.
9
9
  class ParseRepCreator
10
- # @return [Rley::Parser::GFGParsing]
10
+ # @return [Rley::Parser::GFGParsing]
11
11
  # Link to Parsing object (= results of recognizer)
12
12
  attr_reader(:parsing)
13
-
13
+
14
14
  # Constructor. Creates and initialize a ParseRepCreator instance.
15
15
  # @return [ParseRepCreator]
16
16
  def initialize(aParsingResult)
17
17
  @parsing = aParsingResult
18
- end
19
-
18
+ end
19
+
20
20
  # Factory method that produces the representation of the parse.
21
- # @return [Rley::PTree::ParseTree, Rley::SPPF::ParseForest]
21
+ # @return [Rley::PTree::ParseTree, Rley::SPPF::ParseForest]
22
22
  # The parse representation.
23
23
  def create(aBuilder = nil)
24
24
  a_walker = walker(parsing)
@@ -38,14 +38,14 @@ module Rley # This module is used as a namespace
38
38
  end
39
39
  raise e
40
40
  end
41
-
41
+
42
42
  a_builder.done!
43
43
 
44
- return a_builder.result
44
+ a_builder.result
45
45
  end
46
-
46
+
47
47
  private
48
-
48
+
49
49
  # Create a Parsing walker, that is, an object
50
50
  # that will iterate over the relevant nodes (= parsing entries)
51
51
  # of a GFGParsing
@@ -58,13 +58,11 @@ module Rley # This module is used as a namespace
58
58
 
59
59
  # By default, when a end vertex is re-visited don't jump
60
60
  # its corresponding start vertex.
61
- def jump_to_start()
61
+ def jump_to_start
62
62
  false
63
63
  end
64
-
65
64
  end # class
66
65
  end # module
67
66
  end # module
68
67
 
69
- # End of file
70
-
68
+ # End of file
@@ -50,7 +50,7 @@ module Rley # This module is used as a namespace
50
50
  end
51
51
 
52
52
  # Notify the builder that the parse tree construction is complete.
53
- def done!()
53
+ def done!
54
54
  result.done!
55
55
  end
56
56
 
@@ -92,7 +92,7 @@ module Rley # This module is used as a namespace
92
92
  private
93
93
 
94
94
  # Return the top of stack element.
95
- def tos()
95
+ def tos
96
96
  @stack.last
97
97
  end
98
98
 
@@ -207,7 +207,7 @@ module Rley # This module is used as a namespace
207
207
  # @param anEntry [ParseEntry] The entry being visited
208
208
  def terminal_before_dot?(anEntry)
209
209
  prev_symbol = anEntry.prev_symbol
210
- return prev_symbol && prev_symbol.terminal?
210
+ prev_symbol&.terminal?
211
211
  end
212
212
 
213
213
  # A terminal symbol was detected at left of dot.
@@ -260,7 +260,7 @@ module Rley # This module is used as a namespace
260
260
  non_terminal = anEntry.vertex.lhs
261
261
  end
262
262
 
263
- return non_terminal
263
+ non_terminal
264
264
  end
265
265
  end # class
266
266
  end # module
@@ -1,27 +1,27 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'parse_rep_creator'
4
- # require_relative 'parse_tree_builder' # TODO remove this line
5
- require_relative 'cst_builder'
6
-
7
- module Rley # This module is used as a namespace
8
- module ParseRep # This module is used as a namespace
9
- # Utility class that helps to create a ParseTree from
10
- # a given Parsing object.
11
- class ParseTreeFactory < ParseRepCreator
12
- protected
13
-
14
- # Create a Builder, that is, an object
15
- # that will create piece by piece the forest
16
- def builder(aParseResult, aBuilder = nil)
17
- if aBuilder
18
- aBuilder.new(aParseResult.tokens)
19
- else
20
- CSTBuilder.new(aParseResult.tokens)
21
- end
22
- end
23
- end # class
24
- end # module
25
- end # module
26
-
27
- # End of file
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'parse_rep_creator'
4
+ # require_relative 'parse_tree_builder' # TODO remove this line
5
+ require_relative 'cst_builder'
6
+
7
+ module Rley # This module is used as a namespace
8
+ module ParseRep # This module is used as a namespace
9
+ # Utility class that helps to create a ParseTree from
10
+ # a given Parsing object.
11
+ class ParseTreeFactory < ParseRepCreator
12
+ protected
13
+
14
+ # Create a Builder, that is, an object
15
+ # that will create piece by piece the forest
16
+ def builder(aParseResult, aBuilder = nil)
17
+ if aBuilder
18
+ aBuilder.new(aParseResult.tokens)
19
+ else
20
+ CSTBuilder.new(aParseResult.tokens)
21
+ end
22
+ end
23
+ end # class
24
+ end # module
25
+ end # module
26
+
27
+ # End of file
@@ -37,7 +37,7 @@ module Rley # This module is used as a namespace
37
37
  end
38
38
 
39
39
  # The signal to begin the visit of the parse tree.
40
- def start()
40
+ def start
41
41
  ptree.accept(self)
42
42
  end
43
43
 
@@ -17,7 +17,7 @@ module Rley # Module used as a namespace
17
17
  end
18
18
 
19
19
  # @return [String] the result of invoking reason.to_s
20
- def message()
20
+ def message
21
21
  return to_s
22
22
  end
23
23
 
@@ -27,11 +27,10 @@ module Rley # Module used as a namespace
27
27
  end
28
28
  end # class
29
29
 
30
-
31
30
  # This parse error occurs when no input for parsing was provided
32
31
  # while the grammar requires some non-empty input.
33
32
  class NoInput < ErrorReason
34
- def initialize()
33
+ def initialize
35
34
  super(0)
36
35
  end
37
36
 
@@ -61,7 +60,7 @@ module Rley # Module used as a namespace
61
60
 
62
61
  protected
63
62
 
64
- def position()
63
+ def position
65
64
  return last_token.position if last_token.respond_to?(:position)
66
65
 
67
66
  rank + 1
@@ -76,7 +75,7 @@ module Rley # Module used as a namespace
76
75
  else
77
76
  "'#{term_names[0]}'"
78
77
  end
79
- return explain
78
+ explain
80
79
  end
81
80
  end # class
82
81
 
@@ -16,32 +16,30 @@ module Rley # This module is used as a namespace
16
16
 
17
17
  # @param aGFGraph [GFG::GrmFlowGraph] The GFG for the grammar in use.
18
18
  def initialize(aGFGraph)
19
- @sets = [ ParseEntrySet.new ]
19
+ @sets = [ParseEntrySet.new]
20
20
  push_entry(aGFGraph.start_vertex, 0, 0, :start_rule)
21
21
  end
22
22
 
23
23
  # @return [Syntax::NonTerminal] the start symbol of the grammar.
24
- def start_symbol()
25
- return sets.first.entries[0].vertex.non_terminal
24
+ def start_symbol
25
+ sets.first.entries[0].vertex.non_terminal
26
26
  end
27
27
 
28
28
  # @param index [Integer]
29
29
  # @return [ParseEntrySet] Access the entry set at given position.
30
30
  def [](index)
31
- return sets[index]
31
+ sets[index]
32
32
  end
33
33
 
34
34
  # Return the index value of the last non-empty entry set.
35
35
  # @return [Integer]
36
- def last_index()
36
+ def last_index
37
37
  first_empty = sets.find_index(&:empty?)
38
- index = if first_empty.nil?
39
- sets.size - 1
40
- else
41
- first_empty.zero? ? 0 : first_empty - 1
42
- end
43
-
44
- return index
38
+ if first_empty.nil?
39
+ sets.size - 1
40
+ else
41
+ first_empty.zero? ? 0 : first_empty - 1
42
+ end
45
43
  end
46
44
 
47
45
  # Push a parse entry for the chart entry with given index
@@ -60,20 +58,18 @@ module Rley # This module is used as a namespace
60
58
 
61
59
  add_entry_set
62
60
  end
63
- pushed = self[anIndex].push_entry(new_entry)
64
-
65
- return pushed
61
+ self[anIndex].push_entry(new_entry)
66
62
  end
67
63
 
68
64
  # Retrieve the first parse entry added to this chart
69
65
  # @return [ParseEntry]
70
- def initial_entry()
71
- return sets[0].first
66
+ def initial_entry
67
+ sets[0].first
72
68
  end
73
69
 
74
70
  # Retrieve the entry that corresponds to a complete and successful parse
75
71
  # @return [ParseEntry]
76
- def accepting_entry()
72
+ def accepting_entry
77
73
  # Success can be detected as follows:
78
74
  # The last chart entry set has at least one complete parse entry
79
75
  # for the start symbol with an origin == 0
@@ -95,7 +91,7 @@ module Rley # This module is used as a namespace
95
91
 
96
92
  success_entries.first
97
93
  end
98
-
94
+
99
95
  # @return [Integer] The number of states.
100
96
  def count_states
101
97
  sets.size
@@ -103,6 +99,7 @@ module Rley # This module is used as a namespace
103
99
 
104
100
  # @return [Integer] The total number of entries.
105
101
  def count_entries
102
+ # rubocop: disable Lint/UselessAssignment
106
103
  sets.reduce(0) do |sub_result, a_set|
107
104
  sub_result += a_set.size
108
105
  end
@@ -114,6 +111,7 @@ module Rley # This module is used as a namespace
114
111
  sub_result += a_set.count_edges
115
112
  end
116
113
  end
114
+ # rubocop: enable Lint/UselessAssignment
117
115
 
118
116
  # @ return [String] A human-readable representation of the chart.
119
117
  def to_s
@@ -121,16 +119,16 @@ module Rley # This module is used as a namespace
121
119
  sets.each_with_index do |a_set, i|
122
120
  result << "State[#{i}]\n"
123
121
  a_set.entries.each do |item|
124
- result << ' ' + item.to_s + "\n"
122
+ result << " #{item}\n"
125
123
  end
126
124
  end
127
-
125
+
128
126
  result
129
127
  end
130
128
 
131
129
  private
132
130
 
133
- def add_entry_set()
131
+ def add_entry_set
134
132
  @sets << ParseEntrySet.new
135
133
  end
136
134
  end # class
@@ -179,50 +179,36 @@ module Rley # This module is used as a namespace
179
179
  end
180
180
  end
181
181
 
182
- return true
182
+ true
183
183
  end
184
184
 
185
185
  # Return true if the parse was successful (= input tokens
186
186
  # followed the syntax specified by the grammar)
187
- def success?()
187
+ def success?
188
188
  return false if @failure_reason
189
189
 
190
- return chart.accepting_entry ? true : false
190
+ chart.accepting_entry ? true : false
191
191
  end
192
192
 
193
193
  # Return true if there are more than one complete state
194
194
  # for the same lhs and same origin in any state set.
195
- def ambiguous?()
195
+ def ambiguous?
196
196
  found = chart.sets.find { |set| !set.ambiguities.empty? }
197
- return !found.nil?
198
- end
199
-
200
- # Factory method. Builds a ParseForest from the parse result.
201
- # @return [ParseForest]
202
- def parse_forest()
203
- msg = <<-END_MSG
204
- Method Rley::Parser::GFGParsing.parse_forest is deprecated, call
205
- Rley::Engine::to_pforest. It will be removed June 1st
206
- or version 0.6.1 (whichever is first)
207
- END_MSG
208
- # warn(msg)
209
- factory = ParseRep::ParseForestFactory.new(self)
210
-
211
- return factory.create
197
+ !found.nil?
212
198
  end
213
199
 
214
200
  # Retrieve the very first parse entry added to the chart.
215
201
  # This entry corresponds to the start vertex of the GF graph
216
202
  # with origin equal to zero.
217
- def initial_entry()
218
- return chart.initial_entry
203
+ def initial_entry
204
+ chart.initial_entry
219
205
  end
220
206
 
221
207
  # Retrieve the accepting parse entry that represents
222
208
  # a complete, successful parse
223
209
  # After a successful parse, the last chart entry set
224
210
  # has an end parse entry that involves the start symbol
225
- def accepting_entry()
211
+ def accepting_entry
226
212
  return chart.accepting_entry
227
213
  end
228
214
 
@@ -232,7 +218,7 @@ END_MSG
232
218
  end
233
219
 
234
220
  # A notification that the parsing reached an end
235
- def done()
221
+ def done
236
222
  # Parse not successful and no reason identified
237
223
  # Assuming that parse failed because of a premature end
238
224
  premature_end unless success? || failure_reason
@@ -240,7 +226,7 @@ END_MSG
240
226
 
241
227
  # Clean and normalize the object.
242
228
  # Call this method when the parsing is complete.
243
- def tidy_up!()
229
+ def tidy_up!
244
230
  antecedence.each_key do |entry|
245
231
  antecedence[entry].uniq!
246
232
  end
@@ -259,7 +245,7 @@ END_MSG
259
245
  end
260
246
 
261
247
  # @return [String] A human readable representation of itself.
262
- def to_s()
248
+ def to_s
263
249
  result = +''
264
250
  result << "success? #{success?}\n"
265
251
  result << "chart:\n"
@@ -297,7 +283,6 @@ END_MSG
297
283
 
298
284
  antecedence[consequent] << antecedentEntry
299
285
 
300
-
301
286
  =begin
302
287
  # Invariant checks
303
288
  antecedents = antecedence[consequent]
@@ -335,7 +320,7 @@ END_MSG
335
320
  end
336
321
  =end
337
322
  consequent.add_antecedent(antecedentEntry)
338
- return consequent
323
+ consequent
339
324
  end
340
325
 
341
326
  # Push a parse entry (vertex + origin) to the
@@ -350,15 +335,16 @@ END_MSG
350
335
  def forest_builder(anIndex)
351
336
  full_range = { low: 0, high: anIndex }
352
337
  start_production = chart.start_dotted_rule.production
353
- return ParseForestBuilder.new(start_production, full_range)
338
+
339
+ ParseForestBuilder.new(start_production, full_range)
354
340
  end
355
341
 
356
342
  # Factory method. Creates and initializes a ParseEntryTracker instance.
357
- def new_entry_tracker()
343
+ def new_entry_tracker
358
344
  instance = ParseEntryTracker.new(chart.last_index)
359
345
  instance.parse_entry = accepting_entry
360
346
 
361
- return instance
347
+ instance
362
348
  end
363
349
  end # class
364
350
  end # module