Class: Sequitur::GrammarVisitor

Inherits:
Object
  • Object
show all
Defined in:
lib/sequitur/grammar_visitor.rb

Overview

A visitor class dedicated in the visit of Grammar.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(aGrammar) ⇒ GrammarVisitor

Build a visitor for the given grammar.

Parameters:



13
14
15
16
# File 'lib/sequitur/grammar_visitor.rb', line 13

def initialize(aGrammar)
  @grammar = aGrammar
  @subscribers = []
end

Instance Attribute Details

#grammarObject (readonly)

Link to the grammar to visit



6
7
8
# File 'lib/sequitur/grammar_visitor.rb', line 6

def grammar
  @grammar
end

#subscribersObject (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.

Parameters:



80
81
82
# File 'lib/sequitur/grammar_visitor.rb', line 80

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.

Parameters:

  • aProduction (Production)

    the production to visit.



72
73
74
75
76
# File 'lib/sequitur/grammar_visitor.rb', line 72

def end_visit_production(aProduction)
  broadcast(:after_rhs, aProduction.rhs)
  broadcast(:after_production, aProduction)

end

#startObject

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.

Parameters:



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.

Parameters:

  • aProduction (Production)

    the production to visit.



48
49
50
51
# File 'lib/sequitur/grammar_visitor.rb', line 48

def start_visit_production(aProduction)
  broadcast(:before_production, aProduction)
  broadcast(:before_rhs, aProduction.rhs)
end

#subscribe(aSubscriber) ⇒ Object

Add a subscriber for the visit event notification.

Parameters:

  • aSubscriber (Object)


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.

Parameters:

  • aSubscriber (Object)


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).

Parameters:

  • aProdRef (ProductionRef)

    the production reference to visit.



56
57
58
59
60
# File 'lib/sequitur/grammar_visitor.rb', line 56

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.

Parameters:

  • aTerminal (Object)

    the terminal to visit.



65
66
67
68
# File 'lib/sequitur/grammar_visitor.rb', line 65

def visit_terminal(aTerminal)
  broadcast(:before_terminal, aTerminal)
  broadcast(:after_terminal, aTerminal)
end