From f295acb5932633dff6626bd8478b8bec9c559f2e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 19 Aug 2021 13:11:12 -0400 Subject: [PATCH] Generator builds a Lexer, not a Lexer::DFA --- assets/parser.d.erb | 2 +- lib/imbecile/generator.rb | 2 +- lib/imbecile/lexer.rb | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/assets/parser.d.erb b/assets/parser.d.erb index 7ac67b0..d258713 100644 --- a/assets/parser.d.erb +++ b/assets/parser.d.erb @@ -115,7 +115,7 @@ class <%= classname %> uint accepts; } -<% transition_table, state_table = lexer_dfa.build_tables %> +<% transition_table, state_table = lexer.dfa.build_tables %> private static const Transition transitions[] = [ <% transition_table.each do |transition_table_entry| %> Transition(<%= transition_table_entry[:first] %>u, <%= transition_table_entry[:last] %>u, <%= transition_table_entry[:destination] %>u), diff --git a/lib/imbecile/generator.rb b/lib/imbecile/generator.rb index 22aab63..1390a6a 100644 --- a/lib/imbecile/generator.rb +++ b/lib/imbecile/generator.rb @@ -25,7 +25,7 @@ module Imbecile unless rule_names["Start"] raise Error.new("Start rule not found") end - lexer_dfa = Lexer::DFA.new(@grammar.tokens) + lexer = Lexer.new(@grammar) classname = @grammar.classname || File.basename(output_file).sub(%r{[^a-zA-Z0-9].*}, "").capitalize erb = ERB.new(File.read(File.join(File.dirname(File.expand_path(__FILE__)), "../../assets/parser.d.erb")), nil, "<>") result = erb.result(binding.clone) diff --git a/lib/imbecile/lexer.rb b/lib/imbecile/lexer.rb index 7177761..c139a16 100644 --- a/lib/imbecile/lexer.rb +++ b/lib/imbecile/lexer.rb @@ -1,5 +1,13 @@ module Imbecile class Lexer + # @return [DFA] + # Lexer DFA. + attr_accessor :dfa + + def initialize(grammar) + @dfa = DFA.new(grammar.tokens) + end + end end