Class: Parslet::Accelerator::Application Private
- Inherits:
-
Object
- Object
- Parslet::Accelerator::Application
- Defined in:
- lib/parslet/accelerator/application.rb
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Instance Method Summary collapse
- #call ⇒ Object private
-
#initialize(atom, rules) ⇒ Application
constructor
private
A new instance of Application.
- #transform(atom) ⇒ Object private
- #visit_alternative(alternatives) ⇒ Object private
- #visit_entity(name, block) ⇒ Object private
- #visit_lookahead(positive, atom) ⇒ Object private
- #visit_named(name, atom) ⇒ Object private
- #visit_parser(root) ⇒ Object private
- #visit_re(regexp) ⇒ Object private
- #visit_repetition(tag, min, max, atom) ⇒ Object private
- #visit_sequence(sequence) ⇒ Object private
- #visit_str(str) ⇒ Object private
Constructor Details
#initialize(atom, rules) ⇒ Application
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Application.
5 6 7 8 |
# File 'lib/parslet/accelerator/application.rb', line 5 def initialize atom, rules @atom = atom @rules = rules end |
Instance Method Details
#call ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
10 11 12 |
# File 'lib/parslet/accelerator/application.rb', line 10 def call @atom.accept(self) end |
#transform(atom) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/parslet/accelerator/application.rb', line 44 def transform atom @rules.each do |expr, action| # Try and match each rule in turn binding = Parslet::Accelerator.match(atom, expr) if binding # On a successful match, allow the rule action to transform the # parslet into something new. ctx = Parslet::Context.new(binding) return ctx.instance_eval(&action) end end # rules.each # If no rule matches, this is the fallback - a clean new parslet atom. return atom end |
#visit_alternative(alternatives) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
26 27 28 29 |
# File 'lib/parslet/accelerator/application.rb', line 26 def visit_alternative(alternatives) transform Parslet::Atoms::Alternative.new( *alternatives.map { |atom| atom.accept(self) }) end |
#visit_entity(name, block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/parslet/accelerator/application.rb', line 17 def visit_entity(name, block) transform Parslet::Atoms::Entity.new(name) { block.call.accept(self) } end |
#visit_lookahead(positive, atom) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
34 35 36 |
# File 'lib/parslet/accelerator/application.rb', line 34 def visit_lookahead(positive, atom) transform Parslet::Atoms::Lookahead.new(atom, positive) end |
#visit_named(name, atom) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
20 21 22 |
# File 'lib/parslet/accelerator/application.rb', line 20 def visit_named(name, atom) transform Parslet::Atoms::Named.new(atom.accept(self), name) end |
#visit_parser(root) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
14 15 16 |
# File 'lib/parslet/accelerator/application.rb', line 14 def visit_parser(root) transform root.accept(self) end |
#visit_re(regexp) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
37 38 39 |
# File 'lib/parslet/accelerator/application.rb', line 37 def visit_re(regexp) transform Parslet::Atoms::Re.new(regexp) end |
#visit_repetition(tag, min, max, atom) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
23 24 25 |
# File 'lib/parslet/accelerator/application.rb', line 23 def visit_repetition(tag, min, max, atom) transform Parslet::Atoms::Repetition.new(atom.accept(self), min, max, tag) end |
#visit_sequence(sequence) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
30 31 32 33 |
# File 'lib/parslet/accelerator/application.rb', line 30 def visit_sequence(sequence) transform Parslet::Atoms::Sequence.new( *sequence.map { |atom| atom.accept(self) }) end |