You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

27 lines
493 B

module Lox
module Expr
module Visitable
def accept(visitor)
klass = self.class.to_s.split("::").last.downcase
visitor.send("visit_#{klass}", self)
end
end
Binary = Struct.new(:left, :op, :right) do
include Visitable
end
Grouping = Struct.new(:expr) do
include Visitable
end
Literal = Struct.new(:value) do
include Visitable
end
Unary = Struct.new(:op, :right) do
include Visitable
end
end
end