rley 0.7.06 → 0.8.01

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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +362 -62
  3. data/.travis.yml +6 -6
  4. data/CHANGELOG.md +20 -4
  5. data/LICENSE.txt +1 -1
  6. data/README.md +7 -7
  7. data/examples/NLP/engtagger.rb +193 -190
  8. data/examples/NLP/nano_eng/nano_en_demo.rb +7 -11
  9. data/examples/NLP/nano_eng/nano_grammar.rb +21 -21
  10. data/examples/NLP/pico_en_demo.rb +2 -2
  11. data/examples/data_formats/JSON/cli_options.rb +1 -1
  12. data/examples/data_formats/JSON/json_ast_builder.rb +21 -27
  13. data/examples/data_formats/JSON/json_ast_nodes.rb +12 -21
  14. data/examples/data_formats/JSON/json_demo.rb +1 -2
  15. data/examples/data_formats/JSON/json_grammar.rb +13 -13
  16. data/examples/data_formats/JSON/json_lexer.rb +8 -8
  17. data/examples/data_formats/JSON/json_minifier.rb +1 -1
  18. data/examples/general/calc_iter1/calc_ast_builder.rb +13 -10
  19. data/examples/general/calc_iter1/calc_ast_nodes.rb +23 -37
  20. data/examples/general/calc_iter1/calc_grammar.rb +7 -6
  21. data/examples/general/calc_iter1/calc_lexer.rb +6 -4
  22. data/examples/general/calc_iter1/spec/calculator_spec.rb +5 -5
  23. data/examples/general/calc_iter2/calc_ast_builder.rb +5 -3
  24. data/examples/general/calc_iter2/calc_ast_nodes.rb +27 -43
  25. data/examples/general/calc_iter2/calc_grammar.rb +12 -12
  26. data/examples/general/calc_iter2/calc_lexer.rb +11 -10
  27. data/examples/general/calc_iter2/spec/calculator_spec.rb +26 -26
  28. data/examples/general/left.rb +2 -2
  29. data/examples/general/right.rb +2 -2
  30. data/lib/rley.rb +1 -1
  31. data/lib/rley/base/dotted_item.rb +28 -31
  32. data/lib/rley/base/grm_items_builder.rb +6 -0
  33. data/lib/rley/constants.rb +2 -2
  34. data/lib/rley/engine.rb +22 -25
  35. data/lib/rley/formatter/asciitree.rb +3 -3
  36. data/lib/rley/formatter/bracket_notation.rb +1 -8
  37. data/lib/rley/formatter/debug.rb +6 -6
  38. data/lib/rley/formatter/json.rb +2 -2
  39. data/lib/rley/gfg/call_edge.rb +1 -1
  40. data/lib/rley/gfg/edge.rb +5 -5
  41. data/lib/rley/gfg/end_vertex.rb +2 -6
  42. data/lib/rley/gfg/epsilon_edge.rb +1 -5
  43. data/lib/rley/gfg/grm_flow_graph.rb +27 -23
  44. data/lib/rley/gfg/item_vertex.rb +10 -10
  45. data/lib/rley/gfg/non_terminal_vertex.rb +4 -4
  46. data/lib/rley/gfg/scan_edge.rb +1 -1
  47. data/lib/rley/gfg/shortcut_edge.rb +2 -2
  48. data/lib/rley/gfg/start_vertex.rb +4 -8
  49. data/lib/rley/gfg/vertex.rb +43 -39
  50. data/lib/rley/interface.rb +16 -0
  51. data/lib/rley/lexical/token_range.rb +6 -6
  52. data/lib/rley/notation/all_notation_nodes.rb +2 -0
  53. data/lib/rley/notation/ast_builder.rb +191 -0
  54. data/lib/rley/notation/ast_node.rb +44 -0
  55. data/lib/rley/notation/ast_visitor.rb +113 -0
  56. data/lib/rley/notation/grammar.rb +49 -0
  57. data/lib/rley/notation/grammar_builder.rb +504 -0
  58. data/lib/rley/notation/grouping_node.rb +23 -0
  59. data/lib/rley/notation/parser.rb +56 -0
  60. data/lib/rley/notation/sequence_node.rb +35 -0
  61. data/lib/rley/notation/symbol_node.rb +29 -0
  62. data/lib/rley/notation/tokenizer.rb +192 -0
  63. data/lib/rley/parse_forest_visitor.rb +5 -5
  64. data/lib/rley/parse_rep/ast_base_builder.rb +48 -11
  65. data/lib/rley/parse_rep/cst_builder.rb +5 -6
  66. data/lib/rley/parse_rep/parse_forest_builder.rb +22 -18
  67. data/lib/rley/parse_rep/parse_forest_factory.rb +3 -3
  68. data/lib/rley/parse_rep/parse_rep_creator.rb +14 -16
  69. data/lib/rley/parse_rep/parse_tree_builder.rb +4 -4
  70. data/lib/rley/parse_rep/parse_tree_factory.rb +27 -27
  71. data/lib/rley/parse_tree_visitor.rb +1 -1
  72. data/lib/rley/parser/error_reason.rb +4 -5
  73. data/lib/rley/parser/gfg_chart.rb +118 -26
  74. data/lib/rley/parser/gfg_parsing.rb +22 -33
  75. data/lib/rley/parser/parse_entry.rb +25 -31
  76. data/lib/rley/parser/parse_entry_set.rb +19 -16
  77. data/lib/rley/parser/parse_entry_tracker.rb +4 -4
  78. data/lib/rley/parser/parse_tracer.rb +13 -13
  79. data/lib/rley/parser/parse_walker_factory.rb +23 -28
  80. data/lib/rley/ptree/non_terminal_node.rb +7 -5
  81. data/lib/rley/ptree/parse_tree.rb +3 -3
  82. data/lib/rley/ptree/parse_tree_node.rb +5 -5
  83. data/lib/rley/ptree/terminal_node.rb +7 -7
  84. data/lib/rley/rley_error.rb +12 -12
  85. data/lib/rley/sppf/alternative_node.rb +6 -6
  86. data/lib/rley/sppf/composite_node.rb +7 -7
  87. data/lib/rley/sppf/epsilon_node.rb +3 -3
  88. data/lib/rley/sppf/leaf_node.rb +3 -3
  89. data/lib/rley/sppf/parse_forest.rb +16 -16
  90. data/lib/rley/sppf/sppf_node.rb +7 -8
  91. data/lib/rley/sppf/token_node.rb +3 -3
  92. data/lib/rley/syntax/{grammar_builder.rb → base_grammar_builder.rb} +61 -23
  93. data/lib/rley/syntax/grammar.rb +5 -5
  94. data/lib/rley/syntax/grm_symbol.rb +7 -7
  95. data/lib/rley/syntax/match_closest.rb +43 -0
  96. data/lib/rley/syntax/non_terminal.rb +9 -15
  97. data/lib/rley/syntax/production.rb +16 -10
  98. data/lib/rley/syntax/symbol_seq.rb +7 -9
  99. data/lib/rley/syntax/terminal.rb +4 -5
  100. data/lib/rley/syntax/verbatim_symbol.rb +3 -3
  101. data/lib/support/base_tokenizer.rb +19 -18
  102. data/spec/rley/base/dotted_item_spec.rb +2 -2
  103. data/spec/rley/engine_spec.rb +23 -21
  104. data/spec/rley/formatter/asciitree_spec.rb +7 -7
  105. data/spec/rley/formatter/bracket_notation_spec.rb +13 -13
  106. data/spec/rley/formatter/json_spec.rb +1 -1
  107. data/spec/rley/gfg/end_vertex_spec.rb +5 -5
  108. data/spec/rley/gfg/grm_flow_graph_spec.rb +2 -2
  109. data/spec/rley/gfg/item_vertex_spec.rb +10 -10
  110. data/spec/rley/gfg/non_terminal_vertex_spec.rb +3 -3
  111. data/spec/rley/gfg/shortcut_edge_spec.rb +1 -1
  112. data/spec/rley/gfg/start_vertex_spec.rb +5 -5
  113. data/spec/rley/gfg/vertex_spec.rb +3 -3
  114. data/spec/rley/lexical/token_range_spec.rb +16 -16
  115. data/spec/rley/lexical/token_spec.rb +2 -2
  116. data/spec/rley/notation/grammar_builder_spec.rb +302 -0
  117. data/spec/rley/notation/parser_spec.rb +184 -0
  118. data/spec/rley/notation/tokenizer_spec.rb +370 -0
  119. data/spec/rley/parse_forest_visitor_spec.rb +165 -163
  120. data/spec/rley/parse_rep/ambiguous_parse_spec.rb +44 -44
  121. data/spec/rley/parse_rep/ast_builder_spec.rb +6 -7
  122. data/spec/rley/parse_rep/cst_builder_spec.rb +5 -5
  123. data/spec/rley/parse_rep/groucho_spec.rb +24 -26
  124. data/spec/rley/parse_rep/parse_forest_builder_spec.rb +27 -27
  125. data/spec/rley/parse_rep/parse_forest_factory_spec.rb +8 -8
  126. data/spec/rley/parse_rep/parse_tree_factory_spec.rb +3 -3
  127. data/spec/rley/parse_tree_visitor_spec.rb +10 -8
  128. data/spec/rley/parser/dangling_else_spec.rb +445 -0
  129. data/spec/rley/parser/error_reason_spec.rb +6 -6
  130. data/spec/rley/parser/gfg_earley_parser_spec.rb +120 -12
  131. data/spec/rley/parser/gfg_parsing_spec.rb +6 -13
  132. data/spec/rley/parser/parse_entry_spec.rb +19 -19
  133. data/spec/rley/parser/parse_walker_factory_spec.rb +10 -10
  134. data/spec/rley/ptree/non_terminal_node_spec.rb +5 -3
  135. data/spec/rley/ptree/parse_tree_node_spec.rb +4 -4
  136. data/spec/rley/ptree/terminal_node_spec.rb +6 -6
  137. data/spec/rley/sppf/alternative_node_spec.rb +6 -6
  138. data/spec/rley/sppf/non_terminal_node_spec.rb +3 -3
  139. data/spec/rley/sppf/token_node_spec.rb +4 -4
  140. data/spec/rley/support/ambiguous_grammar_helper.rb +4 -5
  141. data/spec/rley/support/grammar_abc_helper.rb +3 -5
  142. data/spec/rley/support/grammar_ambig01_helper.rb +5 -6
  143. data/spec/rley/support/grammar_arr_int_helper.rb +5 -6
  144. data/spec/rley/support/grammar_b_expr_helper.rb +5 -6
  145. data/spec/rley/support/grammar_int_seq_helper.rb +51 -0
  146. data/spec/rley/support/grammar_l0_helper.rb +14 -17
  147. data/spec/rley/support/grammar_pb_helper.rb +8 -7
  148. data/spec/rley/support/grammar_sppf_helper.rb +3 -3
  149. data/spec/rley/syntax/{grammar_builder_spec.rb → base_grammar_builder_spec.rb} +35 -16
  150. data/spec/rley/syntax/grammar_spec.rb +6 -6
  151. data/spec/rley/syntax/grm_symbol_spec.rb +1 -1
  152. data/spec/rley/syntax/match_closest_spec.rb +46 -0
  153. data/spec/rley/syntax/non_terminal_spec.rb +8 -8
  154. data/spec/rley/syntax/production_spec.rb +17 -13
  155. data/spec/rley/syntax/symbol_seq_spec.rb +2 -2
  156. data/spec/rley/syntax/terminal_spec.rb +5 -5
  157. data/spec/rley/syntax/verbatim_symbol_spec.rb +1 -1
  158. data/spec/spec_helper.rb +0 -12
  159. data/spec/support/base_tokenizer_spec.rb +7 -2
  160. metadata +48 -74
  161. data/.simplecov +0 -7
  162. data/lib/rley/parser/parse_state.rb +0 -83
  163. data/lib/rley/parser/parse_state_tracker.rb +0 -59
  164. data/lib/rley/parser/state_set.rb +0 -101
  165. data/spec/rley/parser/parse_state_spec.rb +0 -125
  166. data/spec/rley/parser/parse_tracer_spec.rb +0 -200
  167. data/spec/rley/parser/state_set_spec.rb +0 -130
@@ -91,6 +91,7 @@ module Rley # This module is used as a namespace
91
91
  if succ.dotted_item.production.nullable?
92
92
  succ_entry = apply_rule(start_entry, succ, pos, pos, :nullable_rule)
93
93
  next unless succ_entry.exit_entry?
94
+
94
95
  apply_rule(succ_entry, end_vertex, pos, pos, :nullable_rule)
95
96
  end
96
97
  end
@@ -178,50 +179,36 @@ module Rley # This module is used as a namespace
178
179
  end
179
180
  end
180
181
 
181
- return true
182
+ true
182
183
  end
183
184
 
184
185
  # Return true if the parse was successful (= input tokens
185
186
  # followed the syntax specified by the grammar)
186
- def success?()
187
+ def success?
187
188
  return false if @failure_reason
188
189
 
189
- return chart.accepting_entry ? true : false
190
+ chart.accepting_entry ? true : false
190
191
  end
191
192
 
192
193
  # Return true if there are more than one complete state
193
194
  # for the same lhs and same origin in any state set.
194
- def ambiguous?()
195
+ def ambiguous?
195
196
  found = chart.sets.find { |set| !set.ambiguities.empty? }
196
- return !found.nil?
197
- end
198
-
199
- # Factory method. Builds a ParseForest from the parse result.
200
- # @return [ParseForest]
201
- def parse_forest()
202
- msg = <<-END_MSG
203
- Method Rley::Parser::GFGParsing.parse_forest is deprecated, call
204
- Rley::Engine::to_pforest. It will be removed June 1st
205
- or version 0.6.1 (whichever is first)
206
- END_MSG
207
- # warn(msg)
208
- factory = ParseRep::ParseForestFactory.new(self)
209
-
210
- return factory.create
197
+ !found.nil?
211
198
  end
212
199
 
213
200
  # Retrieve the very first parse entry added to the chart.
214
201
  # This entry corresponds to the start vertex of the GF graph
215
202
  # with origin equal to zero.
216
- def initial_entry()
217
- return chart.initial_entry
203
+ def initial_entry
204
+ chart.initial_entry
218
205
  end
219
206
 
220
207
  # Retrieve the accepting parse entry that represents
221
208
  # a complete, successful parse
222
209
  # After a successful parse, the last chart entry set
223
210
  # has an end parse entry that involves the start symbol
224
- def accepting_entry()
211
+ def accepting_entry
225
212
  return chart.accepting_entry
226
213
  end
227
214
 
@@ -231,7 +218,7 @@ END_MSG
231
218
  end
232
219
 
233
220
  # A notification that the parsing reached an end
234
- def done()
221
+ def done
235
222
  # Parse not successful and no reason identified
236
223
  # Assuming that parse failed because of a premature end
237
224
  premature_end unless success? || failure_reason
@@ -239,7 +226,7 @@ END_MSG
239
226
 
240
227
  # Clean and normalize the object.
241
228
  # Call this method when the parsing is complete.
242
- def tidy_up!()
229
+ def tidy_up!
243
230
  antecedence.each_key do |entry|
244
231
  antecedence[entry].uniq!
245
232
  end
@@ -258,7 +245,7 @@ END_MSG
258
245
  end
259
246
 
260
247
  # @return [String] A human readable representation of itself.
261
- def to_s()
248
+ def to_s
262
249
  result = +''
263
250
  result << "success? #{success?}\n"
264
251
  result << "chart:\n"
@@ -293,9 +280,8 @@ END_MSG
293
280
 
294
281
  def apply_rule(antecedentEntry, aVertex, anOrigin, aPosition, aRuleId)
295
282
  consequent = push_entry(aVertex, anOrigin, aPosition, aRuleId)
296
-
297
- antecedence[consequent] << antecedentEntry
298
-
283
+ if consequent
284
+ antecedence[consequent] << antecedentEntry
299
285
 
300
286
  =begin
301
287
  # Invariant checks
@@ -333,8 +319,10 @@ END_MSG
333
319
  end
334
320
  end
335
321
  =end
336
- consequent.add_antecedent(antecedentEntry)
337
- return consequent
322
+ consequent.add_antecedent(antecedentEntry)
323
+ end
324
+
325
+ consequent
338
326
  end
339
327
 
340
328
  # Push a parse entry (vertex + origin) to the
@@ -349,15 +337,16 @@ END_MSG
349
337
  def forest_builder(anIndex)
350
338
  full_range = { low: 0, high: anIndex }
351
339
  start_production = chart.start_dotted_rule.production
352
- return ParseForestBuilder.new(start_production, full_range)
340
+
341
+ ParseForestBuilder.new(start_production, full_range)
353
342
  end
354
343
 
355
344
  # Factory method. Creates and initializes a ParseEntryTracker instance.
356
- def new_entry_tracker()
345
+ def new_entry_tracker
357
346
  instance = ParseEntryTracker.new(chart.last_index)
358
347
  instance.parse_entry = accepting_entry
359
348
 
360
- return instance
349
+ instance
361
350
  end
362
351
  end # class
363
352
  end # module
@@ -32,7 +32,7 @@ module Rley # This module is used as a namespace
32
32
  # Returns a string containing a human-readable representation of the
33
33
  # production.
34
34
  # @return [String]
35
- def inspect()
35
+ def inspect
36
36
  result = selfie
37
37
  result << ' @antecedents=['
38
38
  antecedents.each do |antec|
@@ -40,7 +40,7 @@ module Rley # This module is used as a namespace
40
40
  end
41
41
  result << ']>'
42
42
 
43
- return result
43
+ result
44
44
  end
45
45
 
46
46
  # Add a link to an antecedent parse entry
@@ -53,56 +53,55 @@ module Rley # This module is used as a namespace
53
53
  def ==(other)
54
54
  return true if equal? other
55
55
 
56
- result = (vertex == other.vertex) && (origin == other.origin)
57
- return result
56
+ (vertex == other.vertex) && (origin == other.origin)
58
57
  end
59
-
58
+
60
59
  def hash
61
- @hash ||= "#{vertex.object_id}-#{origin}".hash
60
+ @hash ||= (vertex.oid_str + "-#{origin}").hash
62
61
  end
63
62
 
64
63
  # Returns true iff the vertex is a start vertex (i.e. of the form: .X)
65
- def start_entry?()
66
- return vertex.kind_of?(GFG::StartVertex)
64
+ def start_entry?
65
+ vertex.kind_of?(GFG::StartVertex)
67
66
  end
68
67
 
69
68
  # Returns true iff the vertex is at the start of rhs
70
69
  # (i.e. of the form: X => .Y
71
- def entry_entry?()
70
+ def entry_entry?
72
71
  return false unless vertex.kind_of?(GFG::ItemVertex)
73
72
 
74
- return vertex.dotted_item.at_start?
73
+ vertex.dotted_item.at_start?
75
74
  end
76
75
 
77
76
  # Returns true iff the vertex corresponds to a dotted item
78
77
  # X => Y
79
78
  def dotted_entry?
80
- return vertex.kind_of?(GFG::ItemVertex)
79
+ vertex.kind_of?(GFG::ItemVertex)
81
80
  end
82
81
 
83
82
  # Returns true iff the vertex is at end of rhs (i.e. of the form: X => Y.)
84
- def exit_entry?()
85
- return vertex.complete?
83
+ def exit_entry?
84
+ vertex.complete?
86
85
  end
87
86
 
88
87
  # Returns true iff the vertex is an end vertex (i.e. of the form: X.)
89
- def end_entry?()
90
- return vertex.kind_of?(GFG::EndVertex)
88
+ def end_entry?
89
+ vertex.kind_of?(GFG::EndVertex)
91
90
  end
92
91
 
93
92
  # Return the symbol before the dot (if any)
94
- def prev_symbol()
95
- return vertex.prev_symbol
93
+ def prev_symbol
94
+ vertex.prev_symbol
96
95
  end
97
96
 
98
97
  # Return the symbol after the dot (if any)
99
- def next_symbol()
100
- return vertex.next_symbol
98
+ def next_symbol
99
+ vertex.next_symbol
101
100
  end
102
101
 
103
102
  # Return true if the entry has no antecedent entry
104
- def orphan?()
105
- return antecedents.empty?
103
+ def orphan?
104
+ antecedents.empty?
106
105
  end
107
106
 
108
107
  =begin
@@ -117,11 +116,6 @@ module Rley # This module is used as a namespace
117
116
  return vertex.predicted_item?
118
117
  end
119
118
 
120
- # Next expected symbol in the production
121
- def next_symbol()
122
- return vertex.next_symbol
123
- end
124
-
125
119
  # Does this parse state have the 'other' as successor?
126
120
  def precedes?(other)
127
121
  return false if self == other
@@ -145,21 +139,21 @@ module Rley # This module is used as a namespace
145
139
  # The format of the text representation is
146
140
  # "format of dotted rule" + " | " + origin
147
141
  # @return [String]
148
- def to_s()
149
- return vertex.label + " | #{origin}"
142
+ def to_s
143
+ vertex.label + " | #{origin}"
150
144
  end
151
145
 
152
146
  protected
153
147
 
154
148
  # Returns a human-readable and partial representation of itself.
155
149
  # @return [String]
156
- def selfie()
150
+ def selfie
157
151
  result = +"#<#{self.class.name}:#{object_id}"
158
152
  result << " @vertex=<#{vertex.class.name}:#{vertex.object_id}"
159
153
  result << " label=#{vertex.label}>"
160
154
  result << " @origin=#{origin}"
161
155
 
162
- return result
156
+ result
163
157
  end
164
158
 
165
159
  private
@@ -169,7 +163,7 @@ module Rley # This module is used as a namespace
169
163
  def valid_vertex(aVertex)
170
164
  raise StandardError, 'GFG vertex cannot be nil' if aVertex.nil?
171
165
 
172
- return aVertex
166
+ aVertex
173
167
  end
174
168
  end # class
175
169
  end # module
@@ -16,44 +16,45 @@ module Rley # This module is used as a namespace
16
16
 
17
17
  # @return [Array<ParseEntry>] The array of parse entries
18
18
  attr_reader :entries
19
-
19
+
20
20
  # @return [Hash] A Hash with pairs { hash of ParseEntry => ParseEntry }
21
- attr_reader :membership
21
+ attr_reader :membership
22
22
 
23
23
  # Constructor.
24
- def initialize()
24
+ def initialize
25
25
  @entries = []
26
26
  @membership = {}
27
27
  @entries4term = Hash.new { |hash, key| hash[key] = [] }
28
28
  @entries4n_term = Hash.new { |hash, key| hash[key] = [] }
29
29
  end
30
-
31
- # Returns a string containing a human-readable representation of the
30
+
31
+ # Returns a string containing a human-readable representation of the
32
32
  # set of parse entries.
33
33
  # @return [String]
34
- def inspect()
34
+ def inspect
35
35
  result = +"#<#{self.class.name}:#{object_id}"
36
36
  result << ' @entries=['
37
37
  entries.each { |e| result << e.inspect }
38
38
  result << ']>'
39
- return result
39
+
40
+ result
40
41
  end
41
42
 
42
43
  # Access the entry at given position
43
44
  def [](index)
44
- return entries[index]
45
+ entries[index]
45
46
  end
46
47
 
47
48
  # Returns a Hash with pairs of the form:
48
49
  # terminal symbol => [ parse entry expecting the terminal ]
49
50
  def entries4term(aTerminal)
50
- return @entries4term.fetch(aTerminal, [])
51
+ @entries4term.fetch(aTerminal, [])
51
52
  end
52
53
 
53
54
  # Returns a Hash with pairs of the form:
54
55
  # non terminal symbol => [ parse entry expecting the non-terminal ]
55
56
  def entries4n_term(aNonTerminal)
56
- return @entries4n_term.fetch(aNonTerminal, [])
57
+ @entries4n_term.fetch(aNonTerminal, [])
57
58
  end
58
59
 
59
60
  # Append the given entry (if it isn't yet in the set)
@@ -71,17 +72,17 @@ module Rley # This module is used as a namespace
71
72
  result = anEntry
72
73
  end
73
74
 
74
- return result
75
+ result
75
76
  end
76
77
 
77
78
  # Return an Array of Arrays of ambiguous parse entries.
78
- def ambiguities()
79
+ def ambiguities
79
80
  complete_entries = entries.select(&:exit_entry?)
80
81
  return [] if complete_entries.size <= 1
81
82
 
82
83
  # Group parse entries by lhs symbol and origin
83
84
  groupings = complete_entries.group_by do |entry|
84
- entry.vertex.dotted_rule.lhs.object_id.to_s
85
+ entry.vertex.dotted_item.lhs.object_id.to_s
85
86
  end
86
87
 
87
88
  # Retain the groups having more than one element.
@@ -90,20 +91,22 @@ module Rley # This module is used as a namespace
90
91
  ambiguous_groups << a_group if a_group.size > 1
91
92
  end
92
93
 
93
- return ambiguous_groups
94
+ ambiguous_groups
94
95
  end
95
96
 
96
97
  # The list of distinct expected terminal symbols. An expected symbol
97
98
  # is on the left of a dot in a parse state of the parse set.
98
- def expected_terminals()
99
+ def expected_terminals
99
100
  return @entries4term.keys
100
101
  end
101
-
102
+
102
103
  def count_edges
104
+ # rubocop: disable Lint/UselessAssignment
103
105
  entries.reduce(0) do |sub_result, entry|
104
106
  sub_result += entry.vertex.edges.size
105
107
  end
106
108
  end
109
+ # rubocop: enable Lint/UselessAssignment
107
110
 
108
111
  private
109
112
 
@@ -40,16 +40,16 @@ module Rley # This module is used as a namespace
40
40
  end
41
41
 
42
42
  # The dotted item for the current parse entry.
43
- def curr_dotted_item()
43
+ def curr_dotted_item
44
44
  parse_entry.dotted_rule
45
45
  end
46
46
 
47
- def symbol_on_left()
48
- return curr_dotted_item.prev_symbol
47
+ def symbol_on_left
48
+ curr_dotted_item.prev_symbol
49
49
  end
50
50
 
51
51
  # Notification that one begins with the previous entry set
52
- def to_prev_entry_set()
52
+ def to_prev_entry_set
53
53
  self.entry_set_index = entry_set_index - 1
54
54
  end
55
55
  end # class
@@ -11,9 +11,7 @@ module Rley # This module is used as a namespace
11
11
 
12
12
  # The trace level
13
13
  attr_reader(:level)
14
-
15
14
  attr_reader(:lexemes)
16
-
17
15
  attr_reader(:col_width)
18
16
 
19
17
  def initialize(aTraceLevel, anIO, aTokenSequence)
@@ -36,8 +34,8 @@ module Rley # This module is used as a namespace
36
34
  def trace_scanning(aStatesetIndex, aParseState)
37
35
  return unless level
38
36
 
39
- scan_picture = '[' + '-' * (col_width - 1) + ']'
40
- org = OpenStruct.new(origin: aStatesetIndex - 1,
37
+ scan_picture = "[#{'-' * (col_width - 1)}]"
38
+ org = OpenStruct.new(origin: aStatesetIndex - 1,
41
39
  dotted_rule: aParseState.dotted_rule)
42
40
  trace_diagram(aStatesetIndex, org, scan_picture)
43
41
  end
@@ -47,35 +45,36 @@ module Rley # This module is used as a namespace
47
45
 
48
46
  trace_diagram(aStatesetIndex, aParseState, '>')
49
47
  end
50
-
48
+
51
49
  def trace_completion(aStatesetIndex, aParseState)
52
50
  return unless level
53
51
 
54
- if aStatesetIndex == lexemes.size && aParseState.origin.zero? &&
52
+ if aStatesetIndex == lexemes.size && aParseState.origin.zero? &&
55
53
  aParseState.complete?
56
54
  picture = '=' * (col_width * lexemes.size - 1)
57
55
  else
58
56
  count = col_width * (aStatesetIndex - aParseState.origin) - 1
59
57
  picture = '-' * count
60
58
  end
61
- completion_picture = '[' + picture + (aParseState.complete? ? ']' : '>')
59
+ completion_picture = "[#{picture}#{aParseState.complete? ? ']' : '>'}"
62
60
  trace_diagram(aStatesetIndex, aParseState, completion_picture)
63
61
  end
64
62
 
65
63
  private
66
64
 
67
- def emit_tokens()
65
+ def emit_tokens
68
66
  literals = lexemes.map { |lx| "'#{lx}'" }
69
- print_if 1, '[' + literals.join(', ') + "]\n"
67
+ print_if 1, "[#{literals.join(', ')}]\n"
70
68
  end
71
69
 
72
- def emit_heading()
70
+ def emit_heading
73
71
  longest = lexemes.map(&:length).max
74
72
  @col_width = longest + 3
75
73
  headers = lexemes.map { |l| l.center(col_width - 1, ' ').to_s }
76
- print_if 1, '|.' + headers.join('.') + ".|\n"
74
+ print_if 1, "|.#{headers.join('.')}.|\n"
77
75
  end
78
76
 
77
+ # rubocop: disable Style/StringConcatenation
79
78
  def padding(aStatesetIndex, aParseState, aPicture)
80
79
  l_pad_pattern = '.' + ' ' * (col_width - 1)
81
80
  left_padding = l_pad_pattern * [0, aParseState.origin].max
@@ -83,6 +82,7 @@ module Rley # This module is used as a namespace
83
82
  right_padding = r_pad_pattern * (lexemes.size - aStatesetIndex)
84
83
  return left_padding + aPicture + right_padding
85
84
  end
85
+ # rubocop: enable Style/StringConcatenation
86
86
 
87
87
  def parse_state_str(aStatesetIndex, aParseState)
88
88
  "[#{aParseState.origin}:#{aStatesetIndex}] #{aParseState.dotted_rule}"
@@ -91,10 +91,10 @@ module Rley # This module is used as a namespace
91
91
  def trace_diagram(aStatesetIndex, aParseState, aPicture)
92
92
  diagram = padding(aStatesetIndex, aParseState, aPicture)
93
93
  prefix = '|'
94
- suffix = '| ' + parse_state_str(aStatesetIndex, aParseState)
94
+ suffix = "| #{parse_state_str(aStatesetIndex, aParseState)}"
95
95
  trace = prefix + diagram + suffix
96
96
 
97
- print_if 1, trace + "\n"
97
+ print_if 1, "#{trace}\n"
98
98
  end
99
99
  end # class
100
100
  end # module