Write output file from ERB template
This commit is contained in:
parent
c1666a1e74
commit
07dd68e367
7
assets/parser.d.erb
Normal file
7
assets/parser.d.erb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<% if grammar.modulename %>
|
||||||
|
module <%= grammar.modulename %>;
|
||||||
|
|
||||||
|
<% end %>
|
||||||
|
class <%= classname %>
|
||||||
|
{
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
require_relative "imbecile/cli"
|
require_relative "imbecile/cli"
|
||||||
require_relative "imbecile/grammar"
|
require_relative "imbecile/grammar"
|
||||||
require_relative "imbecile/version"
|
require_relative "imbecile/version"
|
||||||
|
require "erb"
|
||||||
|
|
||||||
module Imbecile
|
module Imbecile
|
||||||
|
|
||||||
@ -11,6 +12,12 @@ module Imbecile
|
|||||||
unless grammar.load(input_file)
|
unless grammar.load(input_file)
|
||||||
return 2
|
return 2
|
||||||
end
|
end
|
||||||
|
classname = grammar.classname || grammar.capitalize
|
||||||
|
erb = ERB.new(File.read(File.join(File.dirname(File.expand_path(__FILE__)), "../assets/parser.d.erb")), nil, "<>")
|
||||||
|
result = erb.result(binding.clone)
|
||||||
|
File.open(output_file, "wb") do |fh|
|
||||||
|
fh.write(result)
|
||||||
|
end
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
module Imbecile
|
module Imbecile
|
||||||
class Grammar
|
class Grammar
|
||||||
|
|
||||||
|
# @return [String, nil] Module name.
|
||||||
|
attr_reader :modulename
|
||||||
|
|
||||||
|
# @return [String, nil] Class name.
|
||||||
|
attr_reader :classname
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@tokens = {}
|
@tokens = {}
|
||||||
@rules = {}
|
@rules = {}
|
||||||
@ -16,8 +22,10 @@ module Imbecile
|
|||||||
# Skip comment lines.
|
# Skip comment lines.
|
||||||
elsif line =~ /^\s*$/
|
elsif line =~ /^\s*$/
|
||||||
# Skip blank lines.
|
# Skip blank lines.
|
||||||
|
elsif line =~ /^\s*module\s+(\S+)$/
|
||||||
|
@modulename = $1
|
||||||
elsif line =~ /^\s*class\s+(\S+)$/
|
elsif line =~ /^\s*class\s+(\S+)$/
|
||||||
@class = $1
|
@classname = $1
|
||||||
elsif line =~ /^\s*token\s+(\S+)\s+(.*)$/
|
elsif line =~ /^\s*token\s+(\S+)\s+(.*)$/
|
||||||
name, expr = $1, $2
|
name, expr = $1, $2
|
||||||
unless name =~ /^[a-zA-Z_][a-zA-Z_0-9]*$/
|
unless name =~ /^[a-zA-Z_][a-zA-Z_0-9]*$/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user