class Prism::Compiler

编译器是一个访问者,它在访问每个节点时返回该节点的值。这与仅遍历树的访问者不同。当您尝试将树编译成不同的格式时,这会很有用。

例如,要将树的表示形式构建为 s-表达式,您可以编写

class SExpressions < Prism::Compiler
  def visit_arguments_node(node) = [:arguments, super]
  def visit_call_node(node) = [:call, super]
  def visit_integer_node(node) = [:integer]
  def visit_program_node(node) = [:program, super]
end

Prism.parse("1 + 2").value.accept(SExpressions.new)
# => [:program, [[[:call, [[:integer], [:arguments, [[:integer]]]]]]]]