rubyx/lib/ast/expression.rb
2014-05-10 12:54:10 +03:00

41 lines
1.1 KiB
Ruby

# abstract syntax tree (ast)
# This Layer is semi automagically created by parslet using the transform
# It in turn is responsible for the transformation to the next layer, vm code
# This happens in the compile function which must return a Vm::Code derivative
# PS: compare is only for tests and should be factored out to there
module Ast
class Expression
def eval
raise "abstract #{self}"
end
def compile context
raise "abstract #{self}"
end
def inspectt
self.class.name + ".new(" + self.attributes.collect{|m| self.send(m).inspect }.join( ",") +")"
end
def attributes
raise "abstract #{self}"
end
def == other
return false unless other.class == self.class
attributes.each do |a|
left = send(a)
right = other.send( a)
return false unless left.class == right.class
return false unless left == right
end
return true
end
end
end
require_relative "basic_expressions"
require_relative "conditional_expression"
require_relative "function_expression"
require_relative "operator_expressions"