Class: Sequitur::GrammarVisitor
- Inherits:
-
Object
- Object
- Sequitur::GrammarVisitor
- Defined in:
- lib/sequitur/grammar_visitor.rb
Overview
A visitor class dedicated in the visit of Grammar.
Instance Attribute Summary collapse
-
#grammar ⇒ Object
readonly
Link to the grammar to visit.
-
#subscribers ⇒ Object
readonly
List of objects that subscribed to the visit event notification.
Instance Method Summary collapse
-
#end_visit_grammar(aGrammar) ⇒ Object
Visit event.
-
#end_visit_production(aProduction) ⇒ Object
Visit event.
-
#end_visit_rhs(rhs) ⇒ Object
Visit event.
-
#initialize(aGrammar) ⇒ GrammarVisitor
constructor
Build a visitor for the given grammar.
-
#start ⇒ Object
The signal to start the visit.
-
#start_visit_grammar(aGrammar) ⇒ Object
Visit event.
-
#start_visit_production(aProduction) ⇒ Object
Visit event.
-
#start_visit_rhs(rhs) ⇒ Object
Visit event.
-
#subscribe(aSubscriber) ⇒ Object
Add a subscriber for the visit event notification.
-
#unsubscribe(aSubscriber) ⇒ Object
Remove the given object from the subscription list.
-
#visit_prod_ref(aProdRef) ⇒ Object
Visit event.
-
#visit_terminal(aTerminal) ⇒ Object
Visit event.
Constructor Details
#initialize(aGrammar) ⇒ GrammarVisitor
Build a visitor for the given grammar.
12 13 14 15 |
# File 'lib/sequitur/grammar_visitor.rb', line 12 def initialize(aGrammar) @grammar = aGrammar @subscribers = [] end |
Instance Attribute Details
#grammar ⇒ Object (readonly)
Link to the grammar to visit
5 6 7 |
# File 'lib/sequitur/grammar_visitor.rb', line 5 def grammar @grammar end |
#subscribers ⇒ Object (readonly)
List of objects that subscribed to the visit event notification.
8 9 10 |
# File 'lib/sequitur/grammar_visitor.rb', line 8 def subscribers @subscribers end |
Instance Method Details
#end_visit_grammar(aGrammar) ⇒ Object
Visit event. The visitor has completed the visit of the grammar.
88 89 90 |
# File 'lib/sequitur/grammar_visitor.rb', line 88 def end_visit_grammar(aGrammar) broadcast(:after_grammar, aGrammar) end |
#end_visit_production(aProduction) ⇒ Object
Visit event. The visitor has completed its visit of the given production.
82 83 84 |
# File 'lib/sequitur/grammar_visitor.rb', line 82 def end_visit_production(aProduction) broadcast(:after_production, aProduction) end |
#end_visit_rhs(rhs) ⇒ Object
Visit event. The visitor has completed its visit of the given rhs.
76 77 78 |
# File 'lib/sequitur/grammar_visitor.rb', line 76 def end_visit_rhs(rhs) broadcast(:after_rhs, rhs) end |
#start ⇒ Object
The signal to start the visit.
33 34 35 |
# File 'lib/sequitur/grammar_visitor.rb', line 33 def start() grammar.accept(self) end |
#start_visit_grammar(aGrammar) ⇒ Object
Visit event. The visitor is about to visit the grammar.
40 41 42 |
# File 'lib/sequitur/grammar_visitor.rb', line 40 def start_visit_grammar(aGrammar) broadcast(:before_grammar, aGrammar) end |
#start_visit_production(aProduction) ⇒ Object
Visit event. The visitor is about to visit the given production.
47 48 49 |
# File 'lib/sequitur/grammar_visitor.rb', line 47 def start_visit_production(aProduction) broadcast(:before_production, aProduction) end |
#start_visit_rhs(rhs) ⇒ Object
Visit event. The visitor is about to visit the given rhs of production.
53 54 55 |
# File 'lib/sequitur/grammar_visitor.rb', line 53 def start_visit_rhs(rhs) broadcast(:before_rhs, rhs) end |
#subscribe(aSubscriber) ⇒ Object
Add a subscriber for the visit event notification.
21 22 23 |
# File 'lib/sequitur/grammar_visitor.rb', line 21 def subscribe(aSubscriber) subscribers << aSubscriber end |
#unsubscribe(aSubscriber) ⇒ Object
Remove the given object from the subscription list. The object won't be notified of visit events.
28 29 30 |
# File 'lib/sequitur/grammar_visitor.rb', line 28 def unsubscribe(aSubscriber) subscribers.delete_if { |entry| entry == aSubscriber } end |
#visit_prod_ref(aProdRef) ⇒ Object
Visit event. The visitor is visiting the given reference production (= non-terminal symbol).
60 61 62 63 64 |
# File 'lib/sequitur/grammar_visitor.rb', line 60 def visit_prod_ref(aProdRef) production = aProdRef.production broadcast(:before_non_terminal, production) broadcast(:after_non_terminal, production) end |
#visit_terminal(aTerminal) ⇒ Object
Visit event. The visitor is visiting the given terminal symbol.
69 70 71 72 |
# File 'lib/sequitur/grammar_visitor.rb', line 69 def visit_terminal(aTerminal) broadcast(:before_terminal, aTerminal) broadcast(:after_terminal, aTerminal) end |