m2isar.metamodel.utils.ExprVisitor

A helper module for applying all expression visitor functions in this package to functions and instructions to get rid of monkey patching and use instead polymorphism.

Classes

ExprVisitor

Base class for recursive metamodel traversal with 2 modes:

Module Contents

class ExprVisitor[source]

Bases: abc.ABC

Inheritance diagram of m2isar.metamodel.utils.ExprVisitor.ExprVisitor
Base class for recursive metamodel traversal with 2 modes:
  • Generating text by appending context while traversing AST.

  • Analyzing/Mutating the AST (sometimes with the help of a context) and returning a modified AST.

To implement a new visitor, overload the ‘generate’ method of nodes that need altered visitation behavior. Use self for additonal global state information Use context for stack-based information that is only relevant for the current branch of the AST.

abstract generate(expr: m2isar.metamodel.behav.BaseNode, context=None)[source]
abstract default_visit(expr: m2isar.metamodel.behav.BaseNode, context)[source]
visit_codeliteral(expr: m2isar.metamodel.behav.CodeLiteral, context)[source]
visit_operator(expr: m2isar.metamodel.behav.Operator, context)[source]
visit_operation(expr: m2isar.metamodel.behav.Operation, context)[source]
visit_block(expr: m2isar.metamodel.behav.Block, context)[source]
visit_binary_operation(expr: m2isar.metamodel.behav.BinaryOperation, context)[source]
visit_slice_operation(expr: m2isar.metamodel.behav.SliceOperation, context)[source]
visit_concat_operation(expr: m2isar.metamodel.behav.ConcatOperation, context)[source]
visit_number_literal(expr: m2isar.metamodel.behav.NumberLiteral, context)[source]
visit_int_literal(expr: m2isar.metamodel.behav.IntLiteral, context)[source]
visit_string_literal(expr: m2isar.metamodel.behav.StringLiteral, context)[source]
visit_assignment(expr: m2isar.metamodel.behav.Assignment, context)[source]
visit_conditional(expr: m2isar.metamodel.behav.Conditional, context)[source]
visit_loop(expr: m2isar.metamodel.behav.Loop, context)[source]
visit_ternary_operation(expr: m2isar.metamodel.behav.Ternary, context)[source]
visit_return_operation(expr: m2isar.metamodel.behav.Return, context)[source]
visit_unary_operation(expr: m2isar.metamodel.behav.UnaryOperation, context)[source]
visit_scalar_definition(expr: m2isar.metamodel.behav.ScalarDefinition, context)[source]
visit_break(expr: m2isar.metamodel.behav.Break, context)[source]
visit_named_reference(expr: m2isar.metamodel.behav.NamedReference, context)[source]
visit_indexed_reference(expr: m2isar.metamodel.behav.IndexedReference, context)[source]
visit_type_conv(expr: m2isar.metamodel.behav.TypeConv, context)[source]
visit_callable(expr: m2isar.metamodel.behav.Callable, context)[source]
visit_procedure_call(expr: m2isar.metamodel.behav.Callable, context)[source]
visit_group(expr: m2isar.metamodel.behav.Group, context)[source]