Class: Aurum::OperatorPrecedenceDefinition
- Inherits:
-
Object
- Object
- Aurum::OperatorPrecedenceDefinition
show all
- Defined in:
- lib/aurum/grammar.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of OperatorPrecedenceDefinition.
114
115
116
|
# File 'lib/aurum/grammar.rb', line 114
def initialize
@precedences, @associativities = [], {:right => [], :left => []}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name) ⇒ Object
131
132
133
|
# File 'lib/aurum/grammar.rb', line 131
def method_missing name
Aurum::Symbol.new name.to_s, true
end
|
Instance Attribute Details
#associativities ⇒ Object
Returns the value of attribute associativities.
112
113
114
|
# File 'lib/aurum/grammar.rb', line 112
def associativities
@associativities
end
|
#precedences ⇒ Object
Returns the value of attribute precedences.
112
113
114
|
# File 'lib/aurum/grammar.rb', line 112
def precedences
@precedences
end
|
Instance Method Details
#__associativity(direction, *operators) ⇒ Object
139
140
141
142
143
144
145
146
|
# File 'lib/aurum/grammar.rb', line 139
def __associativity direction, *operators
symbols = []
for operator in operators
symbols << (symbol = __get_symbol(operator))
@associativities[direction] << symbol unless @associativities[direction].include? symbol
end
@precedences << symbols.uniq
end
|
#__get_symbol(operator) ⇒ Object
135
136
137
|
# File 'lib/aurum/grammar.rb', line 135
def __get_symbol operator
operator.kind_of?(Aurum::Symbol) ? operator : Aurum::Symbol.new("$literal_#{operator}", true)
end
|
#left(*operators) ⇒ Object
123
124
125
|
# File 'lib/aurum/grammar.rb', line 123
def left *operators
__associativity :left, *operators
end
|
#operator(*operators) ⇒ Object
118
119
120
121
|
# File 'lib/aurum/grammar.rb', line 118
def operator *operators
operators = operators.collect {|x| __get_symbol x}
@precedences << operators.uniq
end
|
#right(*operators) ⇒ Object
127
128
129
|
# File 'lib/aurum/grammar.rb', line 127
def right *operators
__associativity :right, *operators
end
|