MXVM 1.8.1
Virtual Machine, Compiler, and Pascal Frontend
Loading...
Searching...
No Matches
ast.cpp
Go to the documentation of this file.
1
6
7#include "mxvm/ast.hpp"
8#include <sstream>
9
10namespace mxvm {
11
13 visitor.visit(*this);
14 }
15
16 std::string ProgramNode::toString() const {
17 std::ostringstream oss;
18 std::string ptype = (object == true) ? "Object" : "Program";
19 oss << ptype << " {\n";
20 for (const auto &section : sections) {
21 oss << " " << section->toString() << "\n";
22 }
23 oss << "}";
24 return oss.str();
25 }
26
28 visitor.visit(*this);
29 }
30
31 std::string SectionNode::toString() const {
32 std::ostringstream oss;
33 oss << "Section " << (type == DATA ? "data" : "code") << " {\n";
34 for (const auto &stmt : statements) {
35 oss << " " << stmt->toString() << "\n";
36 }
37 oss << " }";
38 return oss.str();
39 }
40
42 visitor.visit(*this);
43 }
44
45 std::string InstructionNode::toString() const {
46 std::ostringstream oss;
47 oss << "Instruction: " << instruction;
48 for (const auto &operand : operands) {
49 oss << " " << operand.op;
50 }
51 return oss.str();
52 }
53
55 visitor.visit(*this);
56 }
57
58 std::string VariableNode::toString() const {
59 std::ostringstream oss;
60 oss << "Variable: " << name << " (type: " << type << ")";
61 if (hasInitializer) {
62 oss << " = " << initialValue;
63 }
64 return oss.str();
65 }
66
68 visitor.visit(*this);
69 }
70
71 std::string ModuleNode::toString() const {
72 std::ostringstream stream;
73 stream << "Module: (" << name << ")";
74 return stream.str();
75 }
76
78 visitor.visit(*this);
79 }
80
81 std::string ObjectNode::toString() const {
82 std::ostringstream stream;
83 stream << "Object: (" << name << ")";
84 return stream.str();
85 }
86
88 visitor.visit(*this);
89 }
90
91 std::string LabelNode::toString() const {
92 return "Label: " + name;
93 }
94
96 visitor.visit(*this);
97 }
98
99 std::string ExpressionNode::toString() const {
100 return "Expression: " + value + (isNumeric ? " (numeric)" : " (symbolic)");
101 }
102
104 visitor.visit(*this);
105 }
106
107 std::string CommentNode::toString() const {
108 return "Comment: " + text;
109 }
110} // namespace mxvm
Visitor interface for traversing the AST node hierarchy.
Definition ast.hpp:166
virtual void visit(ProgramNode &node)=0
void accept(ASTVisitor &visitor) override
Definition ast.cpp:103
std::string toString() const override
Definition ast.cpp:107
std::string text
Definition ast.hpp:158
std::string toString() const override
Definition ast.cpp:99
std::string value
Definition ast.hpp:145
void accept(ASTVisitor &visitor) override
Definition ast.cpp:95
void accept(ASTVisitor &visitor) override
Definition ast.cpp:41
std::string toString() const override
Definition ast.cpp:45
std::vector< Operand > operands
Definition ast.hpp:116
Inc instruction
instruction opcode
Definition ast.hpp:115
std::string toString() const override
Definition ast.cpp:91
std::string name
Definition ast.hpp:134
void accept(ASTVisitor &visitor) override
Definition ast.cpp:87
void accept(ASTVisitor &visitor) override
Definition ast.cpp:67
std::string toString() const override
Definition ast.cpp:71
std::string name
Definition ast.hpp:97
std::string toString() const override
Definition ast.cpp:81
void accept(ASTVisitor &visitor) override
Definition ast.cpp:77
std::string name
Definition ast.hpp:106
virtual std::string toString() const override
Definition ast.cpp:16
std::vector< std::unique_ptr< SectionNode > > sections
Definition ast.hpp:55
virtual void accept(ASTVisitor &visitor) override
Definition ast.cpp:12
void accept(ASTVisitor &visitor) override
Definition ast.cpp:27
std::vector< std::unique_ptr< ASTNode > > statements
Definition ast.hpp:37
std::string toString() const override
Definition ast.cpp:31
SectionType type
Definition ast.hpp:36
bool hasInitializer
Definition ast.hpp:76
std::string toString() const override
Definition ast.cpp:58
void accept(ASTVisitor &visitor) override
Definition ast.cpp:54
std::string name
Definition ast.hpp:73
VarType type
Definition ast.hpp:74
std::string initialValue
Definition ast.hpp:75
AST node hierarchy for the MXVM parser using the Visitor pattern.
Definition ast.hpp:14