rubyx/lib/ast/expression.rb

44 lines
1.2 KiB
Ruby
Raw Normal View History

2014-05-05 10:02:02 +03:00
# 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
2014-05-05 09:51:16 +03:00
module Ast
2014-04-24 17:38:06 +03:00
class Expression
2014-05-29 15:57:33 +03:00
def compile context , into
2014-05-05 10:02:02 +03:00
raise "abstract #{self}"
end
def compile context , into
2014-05-05 10:02:02 +03:00
raise "abstract #{self}"
2014-04-24 17:38:06 +03:00
end
def attributes
raise "abstract #{self}"
end
def == other
2014-04-29 16:22:12 +03:00
return false unless other.class == self.class
attributes.each do |a|
left = send(a)
2014-05-29 15:57:33 +03:00
right = other.send(a)
return false unless left.class == right.class
return false unless left == right
end
return true
end
2014-04-24 17:38:06 +03:00
end
2014-04-24 15:43:20 +03:00
end
2014-05-05 10:02:02 +03:00
require_relative "basic_expressions"
2014-05-29 15:57:33 +03:00
require_relative "call_site_expression"
require_relative "compound_expressions"
2014-05-24 10:18:54 +03:00
require_relative "if_expression"
2014-05-05 10:02:02 +03:00
require_relative "function_expression"
2014-05-29 15:57:33 +03:00
require_relative "module_expression"
2014-05-10 19:02:51 +03:00
require_relative "operator_expressions"
2014-05-29 15:57:33 +03:00
require_relative "return_expression"
require_relative "while_expression"