lib/lrama/state.rb in lrama-0.5.3 vs lib/lrama/state.rb in lrama-0.5.4
- old
+ new
@@ -1,13 +1,13 @@
require "lrama/state/reduce"
-require "lrama/state/shift"
+require "lrama/state/reduce_reduce_conflict"
require "lrama/state/resolved_conflict"
+require "lrama/state/shift"
+require "lrama/state/shift_reduce_conflict"
module Lrama
class State
- Conflict = Struct.new(:symbols, :reduce, :type, keyword_init: true)
-
attr_reader :id, :accessing_symbol, :kernels, :conflicts, :resolved_conflicts,
:default_reduction_rule, :closure, :items
attr_accessor :shifts, :reduces
def initialize(id, accessing_symbol, kernels)
@@ -99,10 +99,14 @@
end
@term_transitions
end
+ def transitions
+ term_transitions + nterm_transitions
+ end
+
def selected_term_transitions
term_transitions.select do |shift, next_state|
!shift.not_selected
end
end
@@ -140,9 +144,13 @@
reduces.each do |r|
if r.rule == default_reduction_rule
r.default_reduction = true
end
end
+ end
+
+ def has_conflicts?
+ !@conflicts.empty?
end
def sr_conflicts
@conflicts.select do |conflict|
conflict.type == :shift_reduce