From 98584ce07ac3c786aefecf0f2969563550599adf Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 24 Jun 2021 15:06:10 -0400 Subject: [PATCH] Add FA#build_tables --- assets/parser.d.erb | 2 +- lib/imbecile/regex/fa.rb | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/assets/parser.d.erb b/assets/parser.d.erb index 7c9e4fd..3e5ca79 100644 --- a/assets/parser.d.erb +++ b/assets/parser.d.erb @@ -15,7 +15,7 @@ class <%= classname %> { uint first; uint last; - uint dest; + uint destination; } private struct LexerState diff --git a/lib/imbecile/regex/fa.rb b/lib/imbecile/regex/fa.rb index afe2017..6c433d1 100644 --- a/lib/imbecile/regex/fa.rb +++ b/lib/imbecile/regex/fa.rb @@ -57,6 +57,27 @@ module Imbecile end end + def build_tables + transition_table = [] + state_table = [] + states = enumerate + states.each do |state, id| + state_table << { + transition_table_index: transition_table.size, + n_transitions: state.transitions.size, + accepts: state.accepts ? state.accepts.id : 0xFFFFFFFF, + } + state.transitions.each do |transition| + transition_table << { + first: transition.code_point_range.first, + last: transition.code_point_range.last, + destination: states[transition.destination], + } + end + end + [transition_table, state_table] + end + end end