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.
14 15 16 17 |
# File 'lib/sequitur/grammar_visitor.rb', line 14 def initialize(aGrammar) @grammar = aGrammar @subscribers = [] end |
Instance Attribute Details
#grammar ⇒ Object (readonly)
Link to the grammar to visit
7 8 9 |
# File 'lib/sequitur/grammar_visitor.rb', line 7 def grammar @grammar end |
#subscribers ⇒ Object (readonly)
List of objects that subscribed to the visit event notification.
10 11 12 |
# File 'lib/sequitur/grammar_visitor.rb', line 10 def subscribers @subscribers end |
Instance Method Details
#end_visit_grammar(aGrammar) ⇒ Object
Visit event. The visitor has completed the visit of the grammar.
86 87 88 |
# File 'lib/sequitur/grammar_visitor.rb', line 86 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.
80 81 82 |
# File 'lib/sequitur/grammar_visitor.rb', line 80 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.
74 75 76 |
# File 'lib/sequitur/grammar_visitor.rb', line 74 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.
39 40 41 |
# File 'lib/sequitur/grammar_visitor.rb', line 39 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.
45 46 47 |
# File 'lib/sequitur/grammar_visitor.rb', line 45 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.
51 52 53 |
# File 'lib/sequitur/grammar_visitor.rb', line 51 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).
58 59 60 61 62 |
# File 'lib/sequitur/grammar_visitor.rb', line 58 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.
67 68 69 70 |
# File 'lib/sequitur/grammar_visitor.rb', line 67 def visit_terminal(aTerminal) broadcast(:before_terminal, aTerminal) broadcast(:after_terminal, aTerminal) end |