From d6779aef00a4a707cf68664f58c2180d184796e7 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 22 Sep 2021 23:26:36 -0400 Subject: [PATCH] Start on Parser#build_tables --- lib/imbecile/parser.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/imbecile/parser.rb b/lib/imbecile/parser.rb index 0544b9c..61f4046 100644 --- a/lib/imbecile/parser.rb +++ b/lib/imbecile/parser.rb @@ -51,6 +51,27 @@ class Imbecile end end + def build_tables + shift_table = [] + state_table = [] + @item_sets.each do |item_set| + shift_entries = item_set.follow_symbols.select do |follow_symbol| + follow_symbol.is_a?(Token) + end.map do |follow_symbol| + { + token_id: follow_symbol.id, + state_id: item_set.follow_item_set[follow_symbol].id, + } + end + state_table << { + shift_index: shift_table.size, + n_shifts: shift_entries.size, + } + shift_table += shift_entries + end + [state_table, shift_table] + end + private def process_item_set(item_set)