Class: Aurum::OperatorPrecedenceDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/aurum/grammar.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeOperatorPrecedenceDefinition

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

#associativitiesObject (readonly)

Returns the value of attribute associativities.



112
113
114
# File 'lib/aurum/grammar.rb', line 112

def associativities
  @associativities
end

#precedencesObject (readonly)

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