Move Token/Rule out of Grammar class

This commit is contained in:
josh committed 2021-08-19 20:00:40 -04:00
1 parent f295acb593
commit 9273bfccf6
5 files changed
+61 -65

No files matched your search

+2 -2
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
-21
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
-42
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
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
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