Add Grammar::Rule class
This commit is contained in:
parent
9d05861819
commit
a34272dfd6
@ -3,6 +3,7 @@ require "set"
|
||||
require_relative "imbecile/cli"
|
||||
require_relative "imbecile/code_point_range"
|
||||
require_relative "imbecile/grammar"
|
||||
require_relative "imbecile/grammar/rule"
|
||||
require_relative "imbecile/grammar/token"
|
||||
require_relative "imbecile/regex"
|
||||
require_relative "imbecile/regex/fa"
|
||||
|
@ -15,6 +15,7 @@ module Imbecile
|
||||
|
||||
def initialize(input)
|
||||
@tokens = []
|
||||
@rules = []
|
||||
@token_names = Set.new
|
||||
input = input.gsub("\r\n", "\n")
|
||||
while !input.empty?
|
||||
@ -49,6 +50,9 @@ module Imbecile
|
||||
elsif input.slice!(/\Adrop\s+(\S+)\n/)
|
||||
pattern = $1
|
||||
@tokens << Token.new(nil, pattern, @tokens.size)
|
||||
elsif input.slice!(/\Arule\s+(\S+)\s+\[(.*?)\] <<\n(.*?)^>>\n/m)
|
||||
rule_name, rule, code = $1, $2, $3
|
||||
@rules << Rule.new(rule_name, rule, code)
|
||||
else
|
||||
if input.size > 25
|
||||
input = input.slice(0..20) + "..."
|
||||
|
16
lib/imbecile/grammar/rule.rb
Normal file
16
lib/imbecile/grammar/rule.rb
Normal file
@ -0,0 +1,16 @@
|
||||
module Imbecile
|
||||
class Grammar
|
||||
|
||||
class Rule
|
||||
|
||||
def initialize(name, rule, code)
|
||||
@name = name
|
||||
rule_components = rule.split(/\s+/)
|
||||
@components = rule_components
|
||||
@code = code
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user