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:



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

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

Instance Attribute Details

#grammarObject (readonly)

Link to the grammar to visit



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

def grammar
  @grammar
end

#subscribersObject (readonly)

List of objects that subscribed to the visit event notification.



8
9
10
# File 'lib/sequitur/grammar_visitor.rb', line 8

def subscribers
  @subscribers
end

Instance Method Details

#end_visit_grammar(aGrammar) ⇒ Object

Visit event. The visitor has completed the visit of the grammar.

Parameters:



88
89
90
# File 'lib/sequitur/grammar_visitor.rb', line 88

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.



82
83
84
# File 'lib/sequitur/grammar_visitor.rb', line 82

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:



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

def end_visit_rhs(rhs)
  broadcast(:after_rhs, rhs)
end

#startObject

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.

Parameters:



40
41
42
# File 'lib/sequitur/grammar_visitor.rb', line 40

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.



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

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:



53
54
55
# File 'lib/sequitur/grammar_visitor.rb', line 53

def start_visit_rhs(rhs)
  broadcast(:before_rhs, rhs)
end

#subscribe(aSubscriber) ⇒ Object

Add a subscriber for the visit event notification.

Parameters:

  • aSubscriber (Object)


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.

Parameters:

  • aSubscriber (Object)


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

Parameters:

  • aProdRef (ProductionRef)

    the production reference to visit.



60
61
62
63
64
# File 'lib/sequitur/grammar_visitor.rb', line 60

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.



69
70
71
72
# File 'lib/sequitur/grammar_visitor.rb', line 69

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