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

公共实例方法

visit(node) 点击切换源代码

访问单个节点。

# File prism/compiler.rb, line 29
def visit(node)
  node&.accept(self)
end
visit_alias_global_variable_node(node)

编译 AliasGlobalVariableNode 节点

visit_alias_method_node(node)

编译 AliasMethodNode 节点

visit_all(nodes) 点击切换源代码

访问节点列表。

# File prism/compiler.rb, line 34
def visit_all(nodes)
  nodes.map { |node| node&.accept(self) }
end
visit_alternation_pattern_node(node)

编译 AlternationPatternNode 节点

visit_and_node(node)

编译 AndNode 节点

visit_arguments_node(node)

编译 ArgumentsNode 节点

visit_array_node(node)

编译 ArrayNode 节点

visit_array_pattern_node(node)

编译 ArrayPatternNode 节点

visit_assoc_node(node)

编译 AssocNode 节点

visit_assoc_splat_node(node)

编译 AssocSplatNode 节点

visit_back_reference_read_node(node)

编译 BackReferenceReadNode 节点

visit_begin_node(node)

编译 BeginNode 节点

visit_block_argument_node(node)

编译 BlockArgumentNode 节点

visit_block_local_variable_node(node)

编译 BlockLocalVariableNode 节点

visit_block_node(node)

编译 BlockNode 节点

visit_block_parameter_node(node)

编译 BlockParameterNode 节点

visit_block_parameters_node(node)

编译 BlockParametersNode 节点

visit_break_node(node)

编译 BreakNode 节点

visit_call_and_write_node(node)

编译 CallAndWriteNode 节点

visit_call_node(node)

编译 CallNode 节点

visit_call_operator_write_node(node)

编译 CallOperatorWriteNode 节点

visit_call_or_write_node(node)

编译 CallOrWriteNode 节点

visit_call_target_node(node)

编译 CallTargetNode 节点

visit_capture_pattern_node(node)

编译 CapturePatternNode 节点

visit_case_match_node(node)

编译 CaseMatchNode 节点

visit_case_node(node)

编译 CaseNode 节点

visit_child_nodes(node) 点击切换源代码

访问给定节点的子节点。

# File prism/compiler.rb, line 39
def visit_child_nodes(node)
  node.compact_child_nodes.map { |node| node.accept(self) }
end
也称为别名:visit_alias_global_variable_node, visit_alias_method_node, visit_alternation_pattern_node, visit_and_node, visit_arguments_node, visit_array_node, visit_array_pattern_node, visit_assoc_node, visit_assoc_splat_node, visit_back_reference_read_node, visit_begin_node, visit_block_argument_node, visit_block_local_variable_node, visit_block_node, visit_block_parameter_node, visit_block_parameters_node, visit_break_node, visit_call_and_write_node, visit_call_node, visit_call_operator_write_node, visit_call_or_write_node, visit_call_target_node, visit_capture_pattern_node, visit_case_match_node, visit_case_node, visit_class_node, visit_class_variable_and_write_node, visit_class_variable_operator_write_node, visit_class_variable_or_write_node, visit_class_variable_read_node, visit_class_variable_target_node, visit_class_variable_write_node, visit_constant_and_write_node, visit_constant_operator_write_node, visit_constant_or_write_node, visit_constant_path_and_write_node, visit_constant_path_node, visit_constant_path_operator_write_node, visit_constant_path_or_write_node, visit_constant_path_target_node, visit_constant_path_write_node, visit_constant_read_node, visit_constant_target_node, visit_constant_write_node, visit_def_node, visit_defined_node, visit_else_node, visit_embedded_statements_node, visit_embedded_variable_node, visit_ensure_node, visit_false_node, visit_find_pattern_node, visit_flip_flop_node, visit_float_node, visit_for_node, visit_forwarding_arguments_node, visit_forwarding_parameter_node, visit_forwarding_super_node, visit_global_variable_and_write_node, visit_global_variable_operator_write_node, visit_global_variable_or_write_node, visit_global_variable_read_node, visit_global_variable_target_node, visit_global_variable_write_node, visit_hash_node, visit_hash_pattern_node, visit_if_node, visit_imaginary_node, visit_implicit_node, visit_implicit_rest_node, visit_in_node, visit_index_and_write_node, visit_index_operator_write_node, visit_index_or_write_node, visit_index_target_node, visit_instance_variable_and_write_node, visit_instance_variable_operator_write_node, visit_instance_variable_or_write_node, visit_instance_variable_read_node, visit_instance_variable_target_node, visit_instance_variable_write_node, visit_integer_node, visit_interpolated_match_last_line_node, visit_interpolated_regular_expression_node, visit_interpolated_string_node, visit_interpolated_symbol_node, visit_interpolated_x_string_node, visit_it_local_variable_read_node, visit_it_parameters_node, visit_keyword_hash_node, visit_keyword_rest_parameter_node, visit_lambda_node, visit_local_variable_and_write_node, visit_local_variable_operator_write_node, visit_local_variable_or_write_node, visit_local_variable_read_node, visit_local_variable_target_node, visit_local_variable_write_node, visit_match_last_line_node, visit_match_predicate_node, visit_match_required_node, visit_match_write_node, visit_missing_node, visit_module_node, visit_multi_target_node, visit_multi_write_node, visit_next_node, visit_nil_node, visit_no_keywords_parameter_node, visit_numbered_parameters_node, visit_numbered_reference_read_node, visit_optional_keyword_parameter_node, visit_optional_parameter_node, visit_or_node, visit_parameters_node, visit_parentheses_node, visit_pinned_expression_node, visit_pinned_variable_node, visit_post_execution_node, visit_pre_execution_node, visit_program_node, visit_range_node, visit_rational_node, visit_redo_node, visit_regular_expression_node, visit_required_keyword_parameter_node, visit_required_parameter_node, visit_rescue_modifier_node, visit_rescue_node, visit_rest_parameter_node, visit_retry_node, visit_return_node, visit_self_node, visit_shareable_constant_node, visit_singleton_class_node, visit_source_encoding_node, visit_source_file_node, visit_source_line_node, visit_splat_node, visit_statements_node, visit_string_node, visit_super_node, visit_symbol_node, visit_true_node, visit_undef_node, visit_unless_node, visit_until_node, visit_when_node, visit_while_node, visit_x_string_node, visit_yield_node
visit_class_node(node)

编译一个 ClassNode 节点

visit_class_variable_and_write_node(node)

编译一个 ClassVariableAndWriteNode 节点

visit_class_variable_operator_write_node(node)

编译一个 ClassVariableOperatorWriteNode 节点

visit_class_variable_or_write_node(node)

编译一个 ClassVariableOrWriteNode 节点

visit_class_variable_read_node(node)

编译一个 ClassVariableReadNode 节点

visit_class_variable_target_node(node)

编译一个 ClassVariableTargetNode 节点

visit_class_variable_write_node(node)

编译一个 ClassVariableWriteNode 节点

visit_constant_and_write_node(node)

编译一个 ConstantAndWriteNode 节点

visit_constant_operator_write_node(node)

编译一个 ConstantOperatorWriteNode 节点

visit_constant_or_write_node(node)

编译一个 ConstantOrWriteNode 节点

visit_constant_path_and_write_node(node)

编译一个 ConstantPathAndWriteNode 节点

visit_constant_path_node(node)

编译一个 ConstantPathNode 节点

visit_constant_path_operator_write_node(node)

编译一个 ConstantPathOperatorWriteNode 节点

visit_constant_path_or_write_node(node)

编译一个 ConstantPathOrWriteNode 节点

visit_constant_path_target_node(node)

编译一个 ConstantPathTargetNode 节点

visit_constant_path_write_node(node)

编译一个 ConstantPathWriteNode 节点

visit_constant_read_node(node)

编译一个 ConstantReadNode 节点

visit_constant_target_node(node)

编译一个 ConstantTargetNode 节点

visit_constant_write_node(node)

编译一个 ConstantWriteNode 节点

visit_def_node(node)

编译一个 DefNode 节点

visit_defined_node(node)

编译一个 DefinedNode 节点

visit_else_node(node)

编译一个 ElseNode 节点

visit_embedded_statements_node(node)

编译一个 EmbeddedStatementsNode 节点

visit_embedded_variable_node(node)

编译一个 EmbeddedVariableNode 节点

visit_ensure_node(node)

编译一个 EnsureNode 节点

visit_false_node(node)

编译一个 FalseNode 节点

visit_find_pattern_node(node)

编译一个 FindPatternNode 节点

visit_flip_flop_node(node)

编译一个 FlipFlopNode 节点

visit_float_node(node)

编译一个 FloatNode 节点

visit_for_node(node)

编译一个 ForNode 节点

visit_forwarding_arguments_node(node)

编译一个 ForwardingArgumentsNode 节点

visit_forwarding_parameter_node(node)

编译一个 ForwardingParameterNode 节点

visit_forwarding_super_node(node)

编译一个 ForwardingSuperNode 节点

visit_global_variable_and_write_node(node)

编译一个 GlobalVariableAndWriteNode 节点

visit_global_variable_operator_write_node(node)

编译一个 GlobalVariableOperatorWriteNode 节点

visit_global_variable_or_write_node(node)

编译一个 GlobalVariableOrWriteNode 节点

visit_global_variable_read_node(node)

编译一个 GlobalVariableReadNode 节点

visit_global_variable_target_node(node)

编译一个 GlobalVariableTargetNode 节点

visit_global_variable_write_node(node)

编译一个 GlobalVariableWriteNode 节点

visit_hash_node(node)

编译一个 HashNode 节点

visit_hash_pattern_node(node)

编译一个 HashPatternNode 节点

visit_if_node(node)

编译一个 IfNode 节点

visit_imaginary_node(node)

编译一个 ImaginaryNode 节点

visit_implicit_node(node)

编译一个 ImplicitNode 节点

visit_implicit_rest_node(node)

编译一个 ImplicitRestNode 节点

visit_in_node(node)

编译一个 InNode 节点

visit_index_and_write_node(node)

编译一个 IndexAndWriteNode 节点

visit_index_operator_write_node(node)

编译一个 IndexOperatorWriteNode 节点

visit_index_or_write_node(node)

编译一个 IndexOrWriteNode 节点

visit_index_target_node(node)

编译一个 IndexTargetNode 节点

visit_instance_variable_and_write_node(node)

编译一个 InstanceVariableAndWriteNode 节点

visit_instance_variable_operator_write_node(node)

编译一个 InstanceVariableOperatorWriteNode 节点

visit_instance_variable_or_write_node(node)

编译一个 InstanceVariableOrWriteNode 节点

visit_instance_variable_read_node(node)

编译一个 InstanceVariableReadNode 节点

visit_instance_variable_target_node(node)

编译一个 InstanceVariableTargetNode 节点

visit_instance_variable_write_node(node)

编译一个 InstanceVariableWriteNode 节点

visit_integer_node(node)

编译一个 IntegerNode 节点

visit_interpolated_match_last_line_node(node)

编译一个 InterpolatedMatchLastLineNode 节点

visit_interpolated_regular_expression_node(node)

编译一个 InterpolatedRegularExpressionNode 节点

visit_interpolated_string_node(node)

编译一个 InterpolatedStringNode 节点

visit_interpolated_symbol_node(node)

编译一个 InterpolatedSymbolNode 节点

visit_interpolated_x_string_node(node)

编译一个 InterpolatedXStringNode 节点

visit_it_local_variable_read_node(node)

编译一个 ItLocalVariableReadNode 节点

visit_it_parameters_node(node)

编译一个 ItParametersNode 节点

visit_keyword_hash_node(node)

编译一个 KeywordHashNode 节点

visit_keyword_rest_parameter_node(node)

编译一个 KeywordRestParameterNode 节点

visit_lambda_node(node)

编译一个 LambdaNode 节点

visit_local_variable_and_write_node(node)

编译一个 LocalVariableAndWriteNode 节点

visit_local_variable_operator_write_node(node)

编译一个 LocalVariableOperatorWriteNode 节点

visit_local_variable_or_write_node(node)

编译一个 LocalVariableOrWriteNode 节点

visit_local_variable_read_node(node)

编译一个 LocalVariableReadNode 节点

visit_local_variable_target_node(node)

编译一个 LocalVariableTargetNode 节点

visit_local_variable_write_node(node)

编译一个 LocalVariableWriteNode 节点

visit_match_last_line_node(node)

编译一个 MatchLastLineNode 节点

visit_match_predicate_node(node)

编译一个 MatchPredicateNode 节点

visit_match_required_node(node)

编译一个 MatchRequiredNode 节点

visit_match_write_node(node)

编译一个 MatchWriteNode 节点

visit_missing_node(node)

编译一个 MissingNode 节点

visit_module_node(node)

编译一个 ModuleNode 节点

visit_multi_target_node(node)

编译一个 MultiTargetNode 节点

visit_multi_write_node(node)

编译一个 MultiWriteNode 节点

visit_next_node(node)

编译一个 NextNode 节点

visit_nil_node(node)

编译一个 NilNode 节点

visit_no_keywords_parameter_node(node)

编译一个 NoKeywordsParameterNode 节点

visit_numbered_parameters_node(node)

编译一个 NumberedParametersNode 节点

visit_numbered_reference_read_node(node)

编译一个 NumberedReferenceReadNode 节点

visit_optional_keyword_parameter_node(node)

编译一个 OptionalKeywordParameterNode 节点

visit_optional_parameter_node(node)

编译一个 OptionalParameterNode 节点

visit_or_node(node)

编译一个 OrNode 节点

visit_parameters_node(node)

编译一个 ParametersNode 节点

visit_parentheses_node(node)

编译一个 ParenthesesNode 节点

visit_pinned_expression_node(node)

编译一个 PinnedExpressionNode 节点

visit_pinned_variable_node(node)

编译一个 PinnedVariableNode 节点

visit_post_execution_node(node)

编译一个 PostExecutionNode 节点

visit_pre_execution_node(node)

编译一个 PreExecutionNode 节点

visit_program_node(node)

编译一个 ProgramNode 节点

visit_range_node(node)

编译一个 RangeNode 节点

visit_rational_node(node)

编译一个 RationalNode 节点

visit_redo_node(node)

编译一个 RedoNode 节点

visit_regular_expression_node(node)

编译一个 RegularExpressionNode 节点

visit_required_keyword_parameter_node(node)

编译一个 RequiredKeywordParameterNode 节点

visit_required_parameter_node(node)

编译一个 RequiredParameterNode 节点

visit_rescue_modifier_node(node)

编译一个 RescueModifierNode 节点

visit_rescue_node(node)

编译一个 RescueNode 节点

visit_rest_parameter_node(node)

编译一个 RestParameterNode 节点

visit_retry_node(node)

编译一个 RetryNode 节点

visit_return_node(node)

编译一个 ReturnNode 节点

visit_self_node(node)

编译一个 SelfNode 节点

visit_shareable_constant_node(node)

编译一个 ShareableConstantNode 节点

visit_singleton_class_node(node)

编译一个 SingletonClassNode 节点

visit_source_encoding_node(node)

编译一个 SourceEncodingNode 节点

visit_source_file_node(node)

编译一个 SourceFileNode 节点

visit_source_line_node(node)

编译一个 SourceLineNode 节点

visit_splat_node(node)

编译一个 SplatNode 节点

visit_statements_node(node)

编译一个 StatementsNode 节点

visit_string_node(node)

编译一个 StringNode 节点

visit_super_node(node)

编译一个 SuperNode 节点

visit_symbol_node(node)

编译一个 SymbolNode 节点

visit_true_node(node)

编译一个 TrueNode 节点

visit_undef_node(node)

编译一个 UndefNode 节点

visit_unless_node(node)

编译一个 UnlessNode 节点

visit_until_node(node)

编译一个 UntilNode 节点

visit_when_node(node)

编译一个 WhenNode 节点

visit_while_node(node)

编译一个 WhileNode 节点

visit_x_string_node(node)

编译一个 XStringNode 节点

visit_yield_node(node)

编译一个 YieldNode 节点