A compiler is a visitor that returns the value of each node as it visits. This is as opposed to a visitor which will only walk the tree. This can be useful when you are trying to compile a tree into a different format.

For example, to build a representation of the tree as s-expressions, you could write:

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]]]]]]]]
Instance Methods

Visit an individual node.

Compile a AliasGlobalVariableNode node

Compile a AliasMethodNode node

Visit a list of nodes.

Compile a AlternationPatternNode node

Compile a AndNode node

Compile a ArgumentsNode node

Compile a ArrayNode node

Compile a ArrayPatternNode node

Compile a AssocNode node

Compile a AssocSplatNode node

Compile a BackReferenceReadNode node

Compile a BeginNode node

Compile a BlockArgumentNode node

Compile a BlockLocalVariableNode node

Compile a BlockNode node

Compile a BlockParameterNode node

Compile a BlockParametersNode node

Compile a BreakNode node

Compile a CallAndWriteNode node

Compile a CallNode node

Compile a CallOperatorWriteNode node

Compile a CallOrWriteNode node

Compile a CallTargetNode node

Compile a CapturePatternNode node

Compile a CaseMatchNode node

Compile a CaseNode node

Visit the child nodes of the given node.

Compile a ClassNode node

Compile a ClassVariableAndWriteNode node

Compile a ClassVariableOrWriteNode node

Compile a ClassVariableReadNode node

Compile a ClassVariableTargetNode node

Compile a ClassVariableWriteNode node

Compile a ConstantAndWriteNode node

Compile a ConstantOperatorWriteNode node

Compile a ConstantOrWriteNode node

Compile a ConstantPathAndWriteNode node

Compile a ConstantPathNode node

Compile a ConstantPathOrWriteNode node

Compile a ConstantPathTargetNode node

Compile a ConstantPathWriteNode node

Compile a ConstantReadNode node

Compile a ConstantTargetNode node

Compile a ConstantWriteNode node

Compile a DefinedNode node

Compile a DefNode node

Compile a ElseNode node

Compile a EmbeddedStatementsNode node

Compile a EmbeddedVariableNode node

Compile a EnsureNode node

Compile a FalseNode node

Compile a FindPatternNode node

Compile a FlipFlopNode node

Compile a FloatNode node

Compile a ForNode node

Compile a ForwardingArgumentsNode node

Compile a ForwardingParameterNode node

Compile a ForwardingSuperNode node

Compile a GlobalVariableOrWriteNode node

Compile a GlobalVariableReadNode node

Compile a GlobalVariableTargetNode node

Compile a GlobalVariableWriteNode node

Compile a HashNode node

Compile a HashPatternNode node

Compile a IfNode node

Compile a ImaginaryNode node

Compile a ImplicitNode node

Compile a ImplicitRestNode node

Compile a IndexAndWriteNode node

Compile a IndexOperatorWriteNode node

Compile a IndexOrWriteNode node

Compile a IndexTargetNode node

Compile a InNode node

Compile a InstanceVariableReadNode node

Compile a InstanceVariableWriteNode node

Compile a IntegerNode node

Compile a InterpolatedStringNode node

Compile a InterpolatedSymbolNode node

Compile a InterpolatedXStringNode node

Compile a ItLocalVariableReadNode node

Compile a ItParametersNode node

Compile a KeywordHashNode node

Compile a KeywordRestParameterNode node

Compile a LambdaNode node

Compile a LocalVariableAndWriteNode node

Compile a LocalVariableOrWriteNode node

Compile a LocalVariableReadNode node

Compile a LocalVariableTargetNode node

Compile a LocalVariableWriteNode node

Compile a MatchLastLineNode node

Compile a MatchPredicateNode node

Compile a MatchRequiredNode node

Compile a MatchWriteNode node

Compile a MissingNode node

Compile a ModuleNode node

Compile a MultiTargetNode node

Compile a MultiWriteNode node

Compile a NextNode node

Compile a NilNode node

Compile a NoKeywordsParameterNode node

Compile a NumberedParametersNode node

Compile a NumberedReferenceReadNode node

Compile a OptionalParameterNode node

Compile a OrNode node

Compile a ParametersNode node

Compile a ParenthesesNode node

Compile a PinnedExpressionNode node

Compile a PinnedVariableNode node

Compile a PostExecutionNode node

Compile a PreExecutionNode node

Compile a ProgramNode node

Compile a RangeNode node

Compile a RationalNode node

Compile a RedoNode node

Compile a RegularExpressionNode node

Compile a RequiredParameterNode node

Compile a RescueModifierNode node

Compile a RescueNode node

Compile a RestParameterNode node

Compile a RetryNode node

Compile a ReturnNode node

Compile a SelfNode node

Compile a ShareableConstantNode node

Compile a SingletonClassNode node

Compile a SourceEncodingNode node

Compile a SourceFileNode node

Compile a SourceLineNode node

Compile a SplatNode node

Compile a StatementsNode node

Compile a StringNode node

Compile a SuperNode node

Compile a SymbolNode node

Compile a TrueNode node

Compile a UndefNode node

Compile a UnlessNode node

Compile a UntilNode node

Compile a WhenNode node

Compile a WhileNode node

Compile a XStringNode node

Compile a YieldNode node