Add some token constants

This commit is contained in:
Josh Holtrop 2021-06-27 23:08:14 -04:00
parent aae7bc188c
commit 4beb3d2016
2 changed files with 15 additions and 8 deletions

View File

@ -17,6 +17,15 @@ require_relative "imbecile/version"
module Imbecile module Imbecile
# Decoding error.
TOKEN_DECODE_ERROR = 0xFFFFFFFD
# Token ID for a "dropped" token.
TOKEN_DROP = 0xFFFFFFFE
# Invalid token ID.
TOKEN_NONE = 0xFFFFFFFF
class Error < RuntimeError class Error < RuntimeError
end end

View File

@ -63,19 +63,17 @@ module Imbecile
states = enumerate states = enumerate
states.each do |state, id| states.each do |state, id|
accepts = accepts =
if state.accepts if state.accepts.nil?
if state.accepts.name TOKEN_NONE
state.accepts.id elsif state.accepts.name
else state.accepts.id
0xFFFFFFFE # drop token
end
else else
0xFFFFFFFF # not an accepting state TOKEN_DROP
end end
state_table << { state_table << {
transition_table_index: transition_table.size, transition_table_index: transition_table.size,
n_transitions: state.transitions.size, n_transitions: state.transitions.size,
accepts: state.accepts ? state.accepts.id : 0xFFFFFFFF, accepts: accepts,
} }
state.transitions.each do |transition| state.transitions.each do |transition|
transition_table << { transition_table << {