Class: PEG::ReferenceResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/peg.rb

Instance Method Summary collapse

Constructor Details

#initialize(rules) ⇒ ReferenceResolver

Returns a new instance of ReferenceResolver.



379
380
381
382
# File 'lib/peg.rb', line 379

def initialize(rules)
  rules = rules.map {|rule| [rule.name, rule]}
  @rules = Hash[rules]
end

Instance Method Details

#_resolve(rule) ⇒ Object



389
390
391
392
393
394
395
396
397
398
399
400
# File 'lib/peg.rb', line 389

def _resolve(rule)
  if rule.class == Reference
    rule = @rules[rule.reference]
    _resolve(rule)
  else
    old_children = rule.children
    rule.children = []  # avoid infinite reqursion of _resolve
    new_children = old_children.map {|child| _resolve(child)}
    rule.children = new_children
    rule
  end
end

#resolveObject



384
385
386
387
# File 'lib/peg.rb', line 384

def resolve
  name, rule = @rules.first
  _resolve(rule)
end