class Sequitur::GrammarVisitor
A visitor class dedicated in the visit of Grammar.
Attributes
@return [Sequitur::DynamicGrammar] Link to the grammar to visit
@return [Object] List of objects that subscribed to the visit event notification.
Public Class Methods
Source
# File lib/sequitur/grammar_visitor.rb, line 14 def initialize(aGrammar) @grammar = aGrammar @subscribers = [] end
Build a visitor for the given grammar. @param aGrammar [DynamicGrammar] the grammar to visit.
Public Instance Methods
Source
# File lib/sequitur/grammar_visitor.rb, line 86 def end_visit_grammar(aGrammar) broadcast(:after_grammar, aGrammar) end
Visit event. The visitor has completed the visit of the grammar. @param aGrammar [DynamicGrammar] the grammar to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 80 def end_visit_production(aProduction) broadcast(:after_production, aProduction) end
Visit event. The visitor has completed its visit of the given production. @param aProduction [Production] the production to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 74 def end_visit_rhs(rhs) broadcast(:after_rhs, rhs) end
Visit event. The visitor has completed its visit of the given rhs. @param rhs [SymbolSequence] the rhs of a production to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 33 def start grammar.accept(self) end
The signal to start the visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 39 def start_visit_grammar(aGrammar) broadcast(:before_grammar, aGrammar) end
Visit event. The visitor is about to visit the grammar. @param aGrammar [DynamicGrammar] the grammar to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 45 def start_visit_production(aProduction) broadcast(:before_production, aProduction) end
Visit event. The visitor is about to visit the given production. @param aProduction [Sequitur::Production] the production to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 51 def start_visit_rhs(rhs) broadcast(:before_rhs, rhs) end
Visit event. The visitor is about to visit the given rhs of production. @param rhs [SymbolSequence] the rhs of a production to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 21 def subscribe(aSubscriber) subscribers << aSubscriber end
Add a subscriber for the visit event notification. @param aSubscriber [Object]
Source
# File lib/sequitur/grammar_visitor.rb, line 28 def unsubscribe(aSubscriber) subscribers.delete_if { |entry| entry == aSubscriber } end
Remove the given object from the subscription list. The object won’t be notified of visit events. @param aSubscriber [Object]
Source
# 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 event. The visitor is visiting the given reference production (= non-terminal symbol). @param aProdRef [ProductionRef] the production reference to visit.
Source
# File lib/sequitur/grammar_visitor.rb, line 67 def visit_terminal(aTerminal) broadcast(:before_terminal, aTerminal) broadcast(:after_terminal, aTerminal) end
Visit event. The visitor is visiting the given terminal symbol. @param aTerminal [Object] the terminal to visit.
Private Instance Methods
Source
# File lib/sequitur/grammar_visitor.rb, line 95 def broadcast(msg, *args) subscribers.each do |a_subscriber| next unless a_subscriber.respond_to?(msg) a_subscriber.send(msg, *args) end end
Send a notification to all subscribers. @param msg [Symbol] event to notify @param args [Array] arguments of the notification.