Treetop: Can the parser be put inside a module?

C

Chiyuan Zhang

Hi!

I'm wondering if Treetop can provide (or is it already have?) a
mechanize like this:

module MyModule
Treetop.load("my")
end

so that I'll get a MyModule::MyParser instead of a top-level MyParser.
Or something like:

Treetop.load_into("my", MyModule)

which might be implemented like the original `load':

# def self.load(path)
def self.load_into(path, module)
adjusted_path = path =~ /\.(treetop|tt)\Z/ ? path : path + '.treetop'
compiler = Treetop::Compiler::GrammarCompiler.new
# Object.class_eval(compiler.ruby_source(adjusted_path))
module.class_eval(compiler.ruby_source(adjusted_path))
end

Any idea? Thanks!
 
P

Phil Tomson

Hi!

I'm wondering if Treetop can provide (or is it already have?) a
mechanize like this:

module MyModule
Treetop.load("my")
end

so that I'll get a MyModule::MyParser instead of a top-level MyParser.
Or something like:

Treetop.load_into("my", MyModule)

which might be implemented like the original `load':

# def self.load(path)
def self.load_into(path, module)
adjusted_path = path =~ /\.(treetop|tt)\Z/ ? path : path + '.treetop'
compiler = Treetop::Compiler::GrammarCompiler.new
# Object.class_eval(compiler.ruby_source(adjusted_path))
module.class_eval(compiler.ruby_source(adjusted_path))
end

Any idea? Thanks!

You can use tt to generate the parsing module:

tt my.treetop

Then to get it into your MyModule:

require 'my'
module MyModule
include My
end
 
C

Clifford Heath

Chiyuan said:
I'm wondering if Treetop can provide (or is it already have?) a
mechanize like this:

module MyModule
Treetop.load("my")
end
so that I'll get a MyModule::MyParser instead of a top-level MyParser.

The Treetop meta-grammar allows you to define your grammar inside a
module, even more than one level. The parser will be emitted inside
a module of the same name.

module MyModule
grammar MyLang
rule top
...
end
end
end

Clifford Heath
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top