summaryrefslogtreecommitdiff
path: root/tool/lrama/lib/lrama/state.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/lrama/lib/lrama/state.rb')
-rw-r--r--tool/lrama/lib/lrama/state.rb28
1 files changed, 3 insertions, 25 deletions
diff --git a/tool/lrama/lib/lrama/state.rb b/tool/lrama/lib/lrama/state.rb
index 45bfe5acf6..ceb74d856a 100644
--- a/tool/lrama/lib/lrama/state.rb
+++ b/tool/lrama/lib/lrama/state.rb
@@ -70,38 +70,16 @@ module Lrama
reduce.look_ahead = look_ahead
end
- # Returns array of [Shift, next_state]
def nterm_transitions
- return @nterm_transitions if @nterm_transitions
-
- @nterm_transitions = []
-
- shifts.each do |shift|
- next if shift.next_sym.term?
-
- @nterm_transitions << [shift, @items_to_state[shift.next_items]]
- end
-
- @nterm_transitions
+ @nterm_transitions ||= transitions.select {|shift, _| shift.next_sym.nterm? }
end
- # Returns array of [Shift, next_state]
def term_transitions
- return @term_transitions if @term_transitions
-
- @term_transitions = []
-
- shifts.each do |shift|
- next if shift.next_sym.nterm?
-
- @term_transitions << [shift, @items_to_state[shift.next_items]]
- end
-
- @term_transitions
+ @term_transitions ||= transitions.select {|shift, _| shift.next_sym.term? }
end
def transitions
- term_transitions + nterm_transitions
+ @transitions ||= shifts.map {|shift| [shift, @items_to_state[shift.next_items]] }
end
def selected_term_transitions