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