lib/treetop/compiler/grammar_compiler.rb in treetop-1.2.3 vs lib/treetop/compiler/grammar_compiler.rb in treetop-1.2.4
- old
+ new
@@ -4,25 +4,37 @@
def compile(source_path, target_path = source_path.gsub(/\.(treetop|tt)\Z/, '.rb'))
File.open(target_path, 'w') do |target_file|
target_file.write(ruby_source(source_path))
end
end
-
+
+ # compile a treetop file into ruby
def ruby_source(source_path)
- File.open(source_path) do |source_file|
- parser = MetagrammarParser.new
- result = parser.parse(source_file.read)
- unless result
- raise RuntimeError.new(parser.failure_reason)
- end
- result.compile
+ ruby_source_from_string(File.read(source_path))
+ end
+
+ # compile a string containing treetop source into ruby
+ def ruby_source_from_string(s)
+ parser = MetagrammarParser.new
+ result = parser.parse(s)
+ unless result
+ raise RuntimeError.new(parser.failure_reason)
end
+ result.compile
end
end
end
+ # compile a treetop source file and load it
def self.load(path)
adjusted_path = path =~ /\.(treetop|tt)\Z/ ? path : path + '.treetop'
+ File.open(adjusted_path) do |source_file|
+ load_from_string(source_file.read)
+ end
+ end
+
+ # compile a treetop source string and load it
+ def self.load_from_string(s)
compiler = Treetop::Compiler::GrammarCompiler.new
- Object.class_eval(compiler.ruby_source(adjusted_path))
+ Object.class_eval(compiler.ruby_source_from_string(s))
end
end