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/cli"
|
||||||
require_relative "imbecile/code_point_range"
|
require_relative "imbecile/code_point_range"
|
||||||
require_relative "imbecile/grammar"
|
require_relative "imbecile/grammar"
|
||||||
|
require_relative "imbecile/grammar/rule"
|
||||||
require_relative "imbecile/grammar/token"
|
require_relative "imbecile/grammar/token"
|
||||||
require_relative "imbecile/regex"
|
require_relative "imbecile/regex"
|
||||||
require_relative "imbecile/regex/fa"
|
require_relative "imbecile/regex/fa"
|
||||||
|
@ -15,6 +15,7 @@ module Imbecile
|
|||||||
|
|
||||||
def initialize(input)
|
def initialize(input)
|
||||||
@tokens = []
|
@tokens = []
|
||||||
|
@rules = []
|
||||||
@token_names = Set.new
|
@token_names = Set.new
|
||||||
input = input.gsub("\r\n", "\n")
|
input = input.gsub("\r\n", "\n")
|
||||||
while !input.empty?
|
while !input.empty?
|
||||||
@ -49,6 +50,9 @@ module Imbecile
|
|||||||
elsif input.slice!(/\Adrop\s+(\S+)\n/)
|
elsif input.slice!(/\Adrop\s+(\S+)\n/)
|
||||||
pattern = $1
|
pattern = $1
|
||||||
@tokens << Token.new(nil, pattern, @tokens.size)
|
@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
|
else
|
||||||
if input.size > 25
|
if input.size > 25
|
||||||
input = input.slice(0..20) + "..."
|
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