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:



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.

Parameters:

  • aProduction (Production)

    the production to visit.



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.

Parameters:



77
78
79
# File 'lib/sequitur/grammar_visitor.rb', line 77

def end_visit_rhs(rhs)
  broadcast(:after_rhs, rhs)
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
# 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.

Parameters:



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.

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.



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.

Parameters:

  • aTerminal (Object)

    the terminal to visit.



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