-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathASTNodes.java
More file actions
175 lines (156 loc) · 5.45 KB
/
Copy pathASTNodes.java
File metadata and controls
175 lines (156 loc) · 5.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import java.util.List;
/**
* Абстрактный базовый класс для всех узлов абстрактного синтаксического дерева (AST).
* AST представляет структуру программы в виде дерева.
*/
abstract class ASTNode {}
/**
* Узел, представляющий всю программу.
* Содержит объявления функций и главный вызов.
*/
class ProgNode extends ASTNode {
List<FuncDeclNode> funcs; // список объявлений функций
CallNode mainCall; // главный вызов функции (точка входа)
/**
* Конструктор узла программы.
* @param funcs список объявлений функций
* @param mainCall главный вызов функции
*/
public ProgNode(List<FuncDeclNode> funcs, CallNode mainCall) {
this.funcs = funcs;
this.mainCall = mainCall;
}
}
/**
* Узел объявления функции.
* Содержит информацию о типе возвращаемого значения, имени, параметрах и теле функции.
*/
class FuncDeclNode extends ASTNode {
String retType; // тип возвращаемого значения ("void" или "int")
String name; // имя функции
List<Param> params; // список параметров функции
List<ASTNode> body; // тело функции (список инструкций)
/**
* Конструктор узла объявления функции.
* @param retType тип возвращаемого значения
* @param name имя функции
* @param params список параметров
* @param body тело функции
*/
public FuncDeclNode(String retType, String name, List<Param> params, List<ASTNode> body) {
this.retType = retType;
this.name = name;
this.params = params;
this.body = body;
}
}
/**
* Класс, представляющий параметр функции.
* Содержит тип и имя параметра.
*/
class Param {
String type; // тип параметра (в данном языке всегда "int")
String name; // имя параметра
/**
* Конструктор параметра.
* @param type тип параметра
* @param name имя параметра
*/
public Param(String type, String name) {
this.type = type;
this.name = name;
}
}
/**
* Узел вызова функции.
* Содержит имя вызываемой функции и список аргументов.
*/
class CallNode extends ASTNode {
String name; // имя вызываемой функции
List<ASTNode> args; // список аргументов (выражений)
/**
* Конструктор узла вызова функции.
* @param name имя функции
* @param args список аргументов
*/
public CallNode(String name, List<ASTNode> args) {
this.name = name;
this.args = args;
}
}
/**
* Узел, представляющий переменную.
* Содержит имя переменной.
*/
class VarNode extends ASTNode {
String name; // имя переменной
/**
* Конструктор узла переменной.
* @param name имя переменной
*/
public VarNode(String name) {
this.name = name;
}
}
/**
* Узел, представляющий числовую константу.
* Содержит целочисленное значение.
*/
class NumNode extends ASTNode {
int value; // числовое значение
/**
* Конструктор узла числовой константы.
* @param value числовое значение
*/
public NumNode(int value) {
this.value = value;
}
}
/**
* Узел бинарной операции.
* Содержит оператор и левый/правый операнды.
*/
class BinNode extends ASTNode {
char op; // оператор ('+' или '-')
ASTNode left; // левый операнд
ASTNode right; // правый операнд
/**
* Конструктор узла бинарной операции.
* @param op оператор
* @param left левый операнд
* @param right правый операнд
*/
public BinNode(char op, ASTNode left, ASTNode right) {
this.op = op;
this.left = left;
this.right = right;
}
}
/**
* Узел инструкции return.
* Содержит возвращаемое выражение (может быть null для void функций).
*/
class ReturnNode extends ASTNode {
ASTNode expr; // возвращаемое выражение (может быть null)
/**
* Конструктор узла return.
* @param expr возвращаемое выражение
*/
public ReturnNode(ASTNode expr) {
this.expr = expr;
}
}
/**
* Узел объявления переменной.
* Содержит имя объявляемой переменной.
*/
class VarDeclNode extends ASTNode {
String name; // имя переменной
/**
* Конструктор узла объявления переменной.
* @param name имя переменной
*/
public VarDeclNode(String name) {
this.name = name;
}
}