46 std::string
toString()
const override;
55 std::vector<std::unique_ptr<SectionNode>>
sections;
59 sections.push_back(std::move(section));
67 virtual std::string
toString()
const override;
91 std::string
toString()
const override;
100 std::string
toString()
const override;
109 std::string
toString()
const override;
128 std::string
toString()
const override;
139 std::string
toString()
const override;
152 std::string
toString()
const override;
162 std::string
toString()
const override;
Abstract base class for all AST nodes.
virtual std::string toString() const =0
virtual void accept(ASTVisitor &visitor)=0
virtual ~ASTNode()=default
Visitor interface for traversing the AST node hierarchy.
virtual void visit(ExpressionNode &node)=0
virtual ~ASTVisitor()=default
virtual void visit(VariableNode &node)=0
virtual void visit(ProgramNode &node)=0
virtual void visit(InstructionNode &node)=0
virtual void visit(ObjectNode &node)=0
virtual void visit(ModuleNode &node)=0
virtual void visit(LabelNode &node)=0
virtual void visit(SectionNode &node)=0
virtual void visit(CommentNode &node)=0
AST node for a literal expression value.
std::string toString() const override
void accept(ASTVisitor &visitor) override
ExpressionNode(const std::string &val, bool numeric=false)
AST node representing a single MXVM instruction with its operands.
InstructionNode(Inc inst, const std::vector< Operand > &ops)
InstructionNode(Inc inst)
void accept(ASTVisitor &visitor) override
std::string toString() const override
std::vector< Operand > operands
void addOperand(const Operand &operand)
Inc instruction
instruction opcode
AST node for a label (or function entry point) in the code section.
std::string toString() const override
void accept(ASTVisitor &visitor) override
bool function
true if this label marks a callable function
LabelNode(const std::string &labelName)
AST node for a module import declaration.
ModuleNode(const std::string &n)
void accept(ASTVisitor &visitor) override
std::string toString() const override
AST node for an object import declaration.
std::string toString() const override
ObjectNode(const std::string &o)
void accept(ASTVisitor &visitor) override
Root AST node representing an entire program or object.
virtual std::string toString() const override
std::vector< std::unique_ptr< SectionNode > > sections
void addInlineObject(std::unique_ptr< ProgramNode > obj)
void addSection(std::unique_ptr< SectionNode > section)
std::vector< std::unique_ptr< ProgramNode > > inlineObjects
virtual void accept(ASTVisitor &visitor) override
Represents a program section (.data, .code, .module, .object).
void accept(ASTVisitor &visitor) override
void addStatement(std::unique_ptr< ASTNode > stmt)
std::vector< std::unique_ptr< ASTNode > > statements
SectionType
Section type discriminator.
std::string toString() const override
SectionNode(SectionType sectionType)
AST node for a variable declaration in a .data section.
std::string toString() const override
VariableNode(VarType varType, const std::string &varName, const std::string &value)
size_t buffer_size
buffer allocation size (for pointer/array types)
void accept(ASTVisitor &visitor) override
VariableNode(VarType varType, const std::string &varName, size_t buf_size)
std::string object
owning object name, if any
VariableNode(VarType varType, const std::string &varName)
Instruction set enum, operand/instruction structs, variable types, and Variable/Variable_Value defini...
Inc
MXVM instruction set opcodes.
VarType
MXVM variable type discriminator.
A single instruction operand (constant value or variable reference).