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.
13 14 15 16 |
# File 'lib/sequitur/grammar_visitor.rb', line 13 def initialize(aGrammar) @grammar = aGrammar @subscribers = [] end |
Instance Attribute Details
#grammar ⇒ Object (readonly)
Link to the grammar to visit
6 7 8 |
# File 'lib/sequitur/grammar_visitor.rb', line 6 def grammar @grammar end |
#subscribers ⇒ Object (readonly)
List of objects that subscribed to the visit event notification.
9 10 11 |
# File 'lib/sequitur/grammar_visitor.rb', line 9 def subscribers @subscribers end |
Instance Method Details
#end_visit_grammar(aGrammar) ⇒ Object
Visit event. The visitor has completed the visit of the grammar.
89 90 91 |
# File 'lib/sequitur/grammar_visitor.rb', line 89 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.
83 84 85 |
# File 'lib/sequitur/grammar_visitor.rb', line 83 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.
77 78 79 |
# File 'lib/sequitur/grammar_visitor.rb', line 77 def end_visit_rhs(rhs) broadcast(:after_rhs, rhs) end |
#start ⇒ Object
The signal to start the visit.
34 35 36 |
# File 'lib/sequitur/grammar_visitor.rb', line 34 def start() grammar.accept(self) end |
#start_visit_grammar(aGrammar) ⇒ Object
Visit event. The visitor is about to visit the grammar.
41 42 43 |
# File 'lib/sequitur/grammar_visitor.rb', line 41 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.
48 49 50 |
# File 'lib/sequitur/grammar_visitor.rb', line 48 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.
54 55 56 |
# File 'lib/sequitur/grammar_visitor.rb', line 54 def start_visit_rhs(rhs) broadcast(:before_rhs, rhs) end |
#subscribe(aSubscriber) ⇒ Object
Add a subscriber for the visit event notification.
22 23 24 |
# File 'lib/sequitur/grammar_visitor.rb', line 22 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.
29 30 31 |
# File 'lib/sequitur/grammar_visitor.rb', line 29 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).
61 62 63 64 65 |
# File 'lib/sequitur/grammar_visitor.rb', line 61 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.
70 71 72 73 |
# File 'lib/sequitur/grammar_visitor.rb', line 70 def visit_terminal(aTerminal) broadcast(:before_terminal, aTerminal) broadcast(:after_terminal, aTerminal) end |