Add Grammar::Rule class

This commit is contained in:
Josh Holtrop 2021-06-14 22:49:43 -04:00
parent 9d05861819
commit a34272dfd6
3 changed files with 21 additions and 0 deletions

View File

@ -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"

View File

@ -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) + "..."

View 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