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
696 B

module Lox
module Expr
def self.expr(name, *children)
klass = Struct.new(name.to_s, *children) do
def accept(visitor)
klass = self.class.to_s.split("::").last.downcase
visitor.send("visit_#{klass}", self)
end
end
const_set(name, klass)
end
expr :Assign, :name, :value
expr :Binary, :left, :op, :right
expr :Call, :callee, :paren, :args
2 years ago
expr :Get, :object, :name
expr :Grouping, :expr
expr :Literal, :value
expr :Logical, :left, :op, :right
2 years ago
expr :Set, :object, :name, :value
2 years ago
expr :Super, :keyword, :method
2 years ago
expr :This, :keyword
expr :Unary, :op, :right
expr :Variable, :name
end
end