Class: PEG::Language
- Inherits:
-
Object
- Object
- PEG::Language
- Defined in:
- lib/peg.rb
Constant Summary collapse
- @@default =
proc {|node, children| children}
- @@rules =
we rely on the fact that 1.9+ Hash maintains order
{}
- @@blocks =
{}
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.default(&block) ⇒ Object
415 416 417 |
# File 'lib/peg.rb', line 415 def self.default(&block) @@default = block end |
.rule(rule, &block) ⇒ Object
409 410 411 412 413 |
# File 'lib/peg.rb', line 409 def self.rule(rule, &block) name = rule.split('<-')[0].strip @@rules[name] = rule @@blocks[name] = block end |
Instance Method Details
#_eval(node) ⇒ Object
433 434 435 436 437 438 439 440 441 442 443 |
# File 'lib/peg.rb', line 433 def _eval(node) block = @@blocks[node.name] || @@default if block.arity == 2 children = node.children.map {|child| _eval(child)} instance_exec(node, children, &block) elsif block.arity == 1 instance_exec(node, &block) else raise "`rule` expects a block with signature |node| or |node, children|" end end |
#eval(source) ⇒ Object
425 426 427 428 429 430 431 |
# File 'lib/peg.rb', line 425 def eval(source) if source.class == String grammar_source = @@rules.values.join("\n") source = Grammar.new(grammar_source).parse(source) end _eval(source) end |
#to_lambda(&block) ⇒ Object
419 420 421 422 423 |
# File 'lib/peg.rb', line 419 def to_lambda(&block) obj = Object.new obj.define_singleton_method(:_, &block) return obj.method(:_).to_proc end |