Class: PEG::ReferenceResolver
- Inherits:
-
Object
- Object
- PEG::ReferenceResolver
- Defined in:
- lib/peg.rb
Instance Method Summary collapse
- #_resolve!(rule) ⇒ Object
-
#initialize(rules) ⇒ ReferenceResolver
constructor
A new instance of ReferenceResolver.
- #reference(name) ⇒ Object
- #resolve ⇒ Object
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 |
#resolve ⇒ Object
383 384 385 |
# File 'lib/peg.rb', line 383 def resolve _resolve!(@rules[0]) end |