Class: PEG::Language

Inherits:
Object
  • Object
show all
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



420
421
422
# File 'lib/peg.rb', line 420

def self.default(&block)
  @@default = block
end

.rule(rule, &block) ⇒ Object



414
415
416
417
418
# File 'lib/peg.rb', line 414

def self.rule(rule, &block)
  name = rule.split('<-')[0].strip
  @@rules[name] = rule
  @@blocks[name] = block
end

Instance Method Details

#_eval(node) ⇒ Object



430
431
432
433
434
# File 'lib/peg.rb', line 430

def _eval(node)
  block = @@blocks.fetch(node.name, @@default)
  children = node.children.map {|child| _eval(child)}
  instance_exec(node, children, &block)
end

#eval(source) ⇒ Object



424
425
426
427
428
# File 'lib/peg.rb', line 424

def eval(source)
  grammar_source = @@rules.values.join("\n")
  node = Grammar.new(grammar_source).parse(source)
  _eval(node)
end