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.
- checksums.yaml +4 -4
- data/.rubocop.yml +348 -54
- data/LICENSE.txt +1 -1
- data/README.md +3 -2
- data/examples/NLP/engtagger.rb +193 -190
- data/examples/NLP/nano_eng/nano_grammar.rb +5 -5
- data/examples/data_formats/JSON/cli_options.rb +1 -1
- data/examples/data_formats/JSON/json_ast_builder.rb +12 -9
- data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
- data/examples/data_formats/JSON/json_grammar.rb +2 -2
- data/examples/data_formats/JSON/json_lexer.rb +8 -8
- data/examples/data_formats/JSON/json_minifier.rb +1 -1
- data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
- data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
- data/examples/general/calc_iter1/calc_grammar.rb +2 -2
- data/examples/general/calc_iter1/calc_lexer.rb +6 -4
- data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
- data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
- data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
- data/examples/general/calc_iter2/calc_grammar.rb +3 -3
- data/examples/general/calc_iter2/calc_lexer.rb +11 -10
- data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
- data/examples/general/left.rb +2 -2
- data/examples/general/right.rb +2 -2
- data/lib/rley/base/dotted_item.rb +23 -31
- data/lib/rley/constants.rb +2 -2
- data/lib/rley/engine.rb +20 -23
- data/lib/rley/formatter/asciitree.rb +3 -3
- data/lib/rley/formatter/bracket_notation.rb +1 -8
- data/lib/rley/formatter/debug.rb +6 -6
- data/lib/rley/formatter/json.rb +2 -2
- data/lib/rley/gfg/call_edge.rb +1 -1
- data/lib/rley/gfg/edge.rb +5 -5
- data/lib/rley/gfg/end_vertex.rb +2 -6
- data/lib/rley/gfg/epsilon_edge.rb +1 -5
- data/lib/rley/gfg/grm_flow_graph.rb +27 -23
- data/lib/rley/gfg/item_vertex.rb +10 -10
- data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
- data/lib/rley/gfg/scan_edge.rb +1 -1
- data/lib/rley/gfg/shortcut_edge.rb +2 -2
- data/lib/rley/gfg/start_vertex.rb +4 -8
- data/lib/rley/gfg/vertex.rb +43 -39
- data/lib/rley/lexical/token_range.rb +6 -6
- data/lib/rley/parse_forest_visitor.rb +5 -5
- data/lib/rley/parse_rep/ast_base_builder.rb +9 -11
- data/lib/rley/parse_rep/cst_builder.rb +5 -6
- data/lib/rley/parse_rep/parse_forest_builder.rb +20 -18
- data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
- data/lib/rley/parse_rep/parse_rep_creator.rb +11 -13
- data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
- data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
- data/lib/rley/parse_tree_visitor.rb +1 -1
- data/lib/rley/parser/error_reason.rb +4 -5
- data/lib/rley/parser/gfg_chart.rb +20 -22
- data/lib/rley/parser/gfg_parsing.rb +16 -30
- data/lib/rley/parser/parse_entry.rb +25 -31
- data/lib/rley/parser/parse_entry_set.rb +18 -15
- data/lib/rley/parser/parse_entry_tracker.rb +4 -4
- data/lib/rley/parser/parse_state.rb +16 -21
- data/lib/rley/parser/parse_state_tracker.rb +4 -4
- data/lib/rley/parser/parse_tracer.rb +13 -13
- data/lib/rley/parser/parse_walker_factory.rb +23 -28
- data/lib/rley/parser/state_set.rb +9 -10
- data/lib/rley/ptree/non_terminal_node.rb +7 -5
- data/lib/rley/ptree/parse_tree.rb +3 -3
- data/lib/rley/ptree/parse_tree_node.rb +5 -5
- data/lib/rley/ptree/terminal_node.rb +7 -7
- data/lib/rley/rley_error.rb +12 -12
- data/lib/rley/sppf/alternative_node.rb +6 -6
- data/lib/rley/sppf/composite_node.rb +7 -7
- data/lib/rley/sppf/epsilon_node.rb +3 -3
- data/lib/rley/sppf/leaf_node.rb +3 -3
- data/lib/rley/sppf/parse_forest.rb +16 -16
- data/lib/rley/sppf/sppf_node.rb +7 -8
- data/lib/rley/sppf/token_node.rb +3 -3
- data/lib/rley/syntax/grammar.rb +5 -5
- data/lib/rley/syntax/grammar_builder.rb +9 -9
- data/lib/rley/syntax/grm_symbol.rb +6 -6
- data/lib/rley/syntax/non_terminal.rb +9 -15
- data/lib/rley/syntax/production.rb +10 -10
- data/lib/rley/syntax/symbol_seq.rb +7 -9
- data/lib/rley/syntax/terminal.rb +4 -5
- data/lib/rley/syntax/verbatim_symbol.rb +3 -3
- data/lib/support/base_tokenizer.rb +19 -18
- data/spec/rley/base/dotted_item_spec.rb +2 -2
- data/spec/rley/engine_spec.rb +17 -15
- data/spec/rley/formatter/asciitree_spec.rb +7 -7
- data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
- data/spec/rley/formatter/json_spec.rb +1 -1
- data/spec/rley/gfg/end_vertex_spec.rb +5 -5
- data/spec/rley/gfg/item_vertex_spec.rb +10 -10
- data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
- data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
- data/spec/rley/gfg/start_vertex_spec.rb +5 -5
- data/spec/rley/gfg/vertex_spec.rb +3 -3
- data/spec/rley/lexical/token_range_spec.rb +16 -16
- data/spec/rley/lexical/token_spec.rb +2 -2
- data/spec/rley/parse_forest_visitor_spec.rb +165 -163
- data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
- data/spec/rley/parse_rep/ast_builder_spec.rb +6 -6
- data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
- data/spec/rley/parse_rep/groucho_spec.rb +21 -21
- data/spec/rley/parse_rep/parse_forest_builder_spec.rb +26 -26
- data/spec/rley/parse_rep/parse_forest_factory_spec.rb +6 -6
- data/spec/rley/parse_rep/parse_tree_factory_spec.rb +2 -2
- data/spec/rley/parse_tree_visitor_spec.rb +10 -8
- data/spec/rley/parser/error_reason_spec.rb +6 -6
- data/spec/rley/parser/gfg_earley_parser_spec.rb +4 -2
- data/spec/rley/parser/gfg_parsing_spec.rb +4 -8
- data/spec/rley/parser/parse_entry_spec.rb +19 -19
- data/spec/rley/parser/parse_state_spec.rb +5 -5
- data/spec/rley/parser/parse_walker_factory_spec.rb +1 -1
- data/spec/rley/parser/state_set_spec.rb +22 -22
- data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
- data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
- data/spec/rley/ptree/terminal_node_spec.rb +6 -6
- data/spec/rley/sppf/alternative_node_spec.rb +6 -6
- data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
- data/spec/rley/sppf/token_node_spec.rb +4 -4
- data/spec/rley/support/ambiguous_grammar_helper.rb +3 -4
- data/spec/rley/support/grammar_abc_helper.rb +2 -4
- data/spec/rley/support/grammar_ambig01_helper.rb +4 -5
- data/spec/rley/support/grammar_arr_int_helper.rb +4 -5
- data/spec/rley/support/grammar_b_expr_helper.rb +4 -5
- data/spec/rley/support/grammar_l0_helper.rb +10 -11
- data/spec/rley/support/grammar_pb_helper.rb +6 -5
- data/spec/rley/support/grammar_sppf_helper.rb +1 -1
- data/spec/rley/syntax/grammar_builder_spec.rb +5 -5
- data/spec/rley/syntax/grammar_spec.rb +6 -6
- data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
- data/spec/rley/syntax/non_terminal_spec.rb +8 -8
- data/spec/rley/syntax/production_spec.rb +13 -13
- data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
- data/spec/rley/syntax/terminal_spec.rb +5 -5
- data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -12
- data/spec/support/base_tokenizer_spec.rb +7 -2
- metadata +21 -62
- 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
|
-
|
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
|
-
|
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
|
-
|
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
|
@@ -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
|
-
|
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 = [
|
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
|
-
|
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
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
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
|
-
|
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 <<
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
347
|
+
instance
|
362
348
|
end
|
363
349
|
end # class
|
364
350
|
end # module
|