Move Token/Rule out of Grammar class

This commit is contained in:
Josh Holtrop 2021-08-19 20:00:40 -04:00
parent f295acb593
commit 9273bfccf6
5 changed files with 61 additions and 65 deletions

View File

@ -7,13 +7,13 @@ require_relative "imbecile/fa/state"
require_relative "imbecile/fa/state/transition"
require_relative "imbecile/generator"
require_relative "imbecile/grammar"
require_relative "imbecile/grammar/rule"
require_relative "imbecile/grammar/token"
require_relative "imbecile/lexer"
require_relative "imbecile/lexer/dfa"
require_relative "imbecile/regex"
require_relative "imbecile/regex/nfa"
require_relative "imbecile/regex/unit"
require_relative "imbecile/rule"
require_relative "imbecile/token"
require_relative "imbecile/version"
module Imbecile

View File

@ -1,21 +0,0 @@
module Imbecile
class Grammar
class Rule
attr_reader :name
attr_reader :components
attr_reader :code
def initialize(name, rule_components, code)
@name = name
@components = rule_components
@code = code
end
end
end
end

View File

@ -1,42 +0,0 @@
module Imbecile
class Grammar
class Token
# @return [String]
# Token name.
attr_reader :name
# @return [String]
# Token pattern.
attr_reader :pattern
# @return [Integer]
# Token ID.
attr_reader :id
# @return [Regex::NFA]
# Regex NFA for matching the token.
attr_reader :nfa
def initialize(name, pattern, id)
@name = name
@pattern = pattern
@id = id
regex = Regex.new(pattern)
regex.nfa.end_state.accepts = self
@nfa = regex.nfa
end
def c_name
@name.upcase
end
def to_s
@name
end
end
end
end

19
lib/imbecile/rule.rb Normal file
View File

@ -0,0 +1,19 @@
module Imbecile
class Rule
attr_reader :name
attr_reader :components
attr_reader :code
def initialize(name, rule_components, code)
@name = name
@components = rule_components
@code = code
end
end
end

40
lib/imbecile/token.rb Normal file
View File

@ -0,0 +1,40 @@
module Imbecile
class Token
# @return [String]
# Token name.
attr_reader :name
# @return [String]
# Token pattern.
attr_reader :pattern
# @return [Integer]
# Token ID.
attr_reader :id
# @return [Regex::NFA]
# Regex NFA for matching the token.
attr_reader :nfa
def initialize(name, pattern, id)
@name = name
@pattern = pattern
@id = id
regex = Regex.new(pattern)
regex.nfa.end_state.accepts = self
@nfa = regex.nfa
end
def c_name
@name.upcase
end
def to_s
@name
end
end
end