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
# File 'lib/peg.rb', line 379

def initialize(rules)
  @rules = rules
end

Instance Method Details

#_resolve!(rule) ⇒ Object


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

def _resolve!(rule)
  if rule.class == Reference
    resolved_rule = reference(rule.reference)
    if resolved_rule.class == Reference
      _resolve!(resolved_rule)
    else
      resolved_rule
    end
  elsif rule.children.length > 0
    rule.children.map! {|child| _resolve!(child)}
    rule
  else
    rule
  end
end

#reference(name) ⇒ Object


403
404
405
# File 'lib/peg.rb', line 403

def reference(name)
  @rules.find {|r| r.name == name} || raise("rule `#{name}` not found")
end

#resolveObject


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

def resolve
  _resolve!(@rules[0])
end