ic10c-node 2.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +300 -0
- package/README.zh.md +300 -0
- package/package.json +50 -0
- package/src/ic10c-node.node +0 -0
- package/src/stdLib.ic +692 -0
- package/static/stdLib.ic.json +3 -0
- package/tsconfig.json +16 -0
- package/types/common.d.ts +145 -0
- package/types/incremental.d.ts +83 -0
- package/types/index.d.ts +53 -0
- package/types/lexer/index.d.ts +18 -0
- package/types/lexer/lexer.d.ts +83 -0
- package/types/lexer/token.d.ts +341 -0
- package/types/linker.d.ts +156 -0
- package/types/locale.d.ts +36 -0
- package/types/parser/ast.d.ts +848 -0
- package/types/parser/index.d.ts +19 -0
- package/types/parser/instructions/binary.d.ts +1209 -0
- package/types/parser/instructions/index.d.ts +22 -0
- package/types/parser/instructions/nullary.d.ts +85 -0
- package/types/parser/instructions/quaternary.d.ts +603 -0
- package/types/parser/instructions/quinary.d.ts +150 -0
- package/types/parser/instructions/senary.d.ts +104 -0
- package/types/parser/instructions/ternary.d.ts +1551 -0
- package/types/parser/instructions/unary.d.ts +518 -0
- package/types/parser/parser.d.ts +84 -0
- package/types/parser/program.d.ts +136 -0
- package/types/semantic/analyser.d.ts +98 -0
- package/types/semantic/index.d.ts +19 -0
- package/types/semantic/semantic.d.ts +81 -0
- package/types/semantic/type_table.d.ts +119 -0
- package/types/semantic/types.d.ts +100 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
// Copyright (c) 2026. All rights reserved.
|
|
2
|
+
// This source code is licensed under the CC BY-NC-SA
|
|
3
|
+
// (Creative Commons Attribution-NonCommercial-NoDerivatives) License, By Xiao Songtao.
|
|
4
|
+
// This software is protected by copyright law. Reproduction, distribution, or use for commercial
|
|
5
|
+
// purposes is prohibited without the author's permission. If you have any questions or require
|
|
6
|
+
// permission, please contact the author: edocsitahw@qq.com
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @file token.d.ts
|
|
10
|
+
* @author edocsitahw
|
|
11
|
+
* @version 1.1
|
|
12
|
+
* @date 2026/07/22 15:36
|
|
13
|
+
* @desc
|
|
14
|
+
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
|
+
* */
|
|
16
|
+
import {Pos} from "../common";
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* IC10 词法标记类型枚举。
|
|
21
|
+
*
|
|
22
|
+
* 对应 C++ `ic10::TokenType`,值从 0 开始递增。
|
|
23
|
+
* 运行时由原生模块导出为不可变对象,可在 JS 层直接使用 `TokenType.FLOAT` 等访问。
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export enum TokenType {
|
|
28
|
+
/* 数字 */
|
|
29
|
+
INTEGER = 0,
|
|
30
|
+
FLOAT,
|
|
31
|
+
HEX_NUMBER,
|
|
32
|
+
BINARY_NUMBER,
|
|
33
|
+
STRING,
|
|
34
|
+
|
|
35
|
+
/* 变量名 */
|
|
36
|
+
IDENTIFIER,
|
|
37
|
+
|
|
38
|
+
/* 寄存器设备 */
|
|
39
|
+
REGISTER,
|
|
40
|
+
DEVICE,
|
|
41
|
+
|
|
42
|
+
/* 符号 */
|
|
43
|
+
LPAREN,
|
|
44
|
+
RPAREN,
|
|
45
|
+
COLON,
|
|
46
|
+
|
|
47
|
+
/* 注释 */
|
|
48
|
+
HEX_COMMENT,
|
|
49
|
+
SLASH_COMMENT,
|
|
50
|
+
DOC_COMMENT,
|
|
51
|
+
TYPE_HINT,
|
|
52
|
+
|
|
53
|
+
/* 换行 */
|
|
54
|
+
NEWLINE,
|
|
55
|
+
|
|
56
|
+
/* 关键字 - 宏与函数 */
|
|
57
|
+
KEYWORD_HASH,
|
|
58
|
+
KEYWORD_STR,
|
|
59
|
+
|
|
60
|
+
/* 关键字 - 常量 */
|
|
61
|
+
KEYWORD_NAN,
|
|
62
|
+
KEYWORD_PINF,
|
|
63
|
+
KEYWORD_NINF,
|
|
64
|
+
KEYWORD_PI,
|
|
65
|
+
KEYWORD_TAU,
|
|
66
|
+
KEYWORD_DEG2RAD,
|
|
67
|
+
KEYWORD_RAD2DEG,
|
|
68
|
+
KEYWORD_EPSILON,
|
|
69
|
+
KEYWORD_RGAS,
|
|
70
|
+
|
|
71
|
+
/* 文件结束标记 */
|
|
72
|
+
END,
|
|
73
|
+
|
|
74
|
+
/* 未知标记 */
|
|
75
|
+
UNKNOWN,
|
|
76
|
+
|
|
77
|
+
/* 关键字 - 空指令 */
|
|
78
|
+
KEYWORD_HCF,
|
|
79
|
+
KEYWORD_YIELD,
|
|
80
|
+
|
|
81
|
+
/* 关键字 - 预处理指令 */
|
|
82
|
+
KEYWORD_ALIAS,
|
|
83
|
+
KEYWORD_DEFINE,
|
|
84
|
+
|
|
85
|
+
/* 关键字 - 一元指令 */
|
|
86
|
+
KEYWORD_PEEK,
|
|
87
|
+
KEYWORD_POP,
|
|
88
|
+
KEYWORD_PUSH,
|
|
89
|
+
KEYWORD_CLR,
|
|
90
|
+
KEYWORD_J,
|
|
91
|
+
KEYWORD_JAL,
|
|
92
|
+
KEYWORD_JR,
|
|
93
|
+
KEYWORD_RAND,
|
|
94
|
+
KEYWORD_SLEEP,
|
|
95
|
+
KEYWORD_CLRD,
|
|
96
|
+
|
|
97
|
+
/* 关键字 - 二元指令 */
|
|
98
|
+
KEYWORD_ABS,
|
|
99
|
+
KEYWORD_ACOS,
|
|
100
|
+
KEYWORD_ADD,
|
|
101
|
+
KEYWORD_ASIN,
|
|
102
|
+
KEYWORD_ATAN,
|
|
103
|
+
KEYWORD_ATAN2,
|
|
104
|
+
KEYWORD_CEIL,
|
|
105
|
+
KEYWORD_COS,
|
|
106
|
+
KEYWORD_DIV,
|
|
107
|
+
KEYWORD_EXP,
|
|
108
|
+
KEYWORD_FLOOR,
|
|
109
|
+
KEYWORD_LOG,
|
|
110
|
+
KEYWORD_MAX,
|
|
111
|
+
KEYWORD_MIN,
|
|
112
|
+
KEYWORD_MOD,
|
|
113
|
+
KEYWORD_MUL,
|
|
114
|
+
KEYWORD_POW,
|
|
115
|
+
KEYWORD_ROUND,
|
|
116
|
+
KEYWORD_SIN,
|
|
117
|
+
KEYWORD_SQRT,
|
|
118
|
+
KEYWORD_SGN,
|
|
119
|
+
KEYWORD_SUB,
|
|
120
|
+
KEYWORD_TAN,
|
|
121
|
+
KEYWORD_TRUNC,
|
|
122
|
+
KEYWORD_NOT,
|
|
123
|
+
KEYWORD_MOVE,
|
|
124
|
+
KEYWORD_POKE,
|
|
125
|
+
KEYWORD_BEQZ,
|
|
126
|
+
KEYWORD_BEQZAL,
|
|
127
|
+
KEYWORD_BNEZ,
|
|
128
|
+
KEYWORD_BNEZAL,
|
|
129
|
+
KEYWORD_BGEZ,
|
|
130
|
+
KEYWORD_BGEZAL,
|
|
131
|
+
KEYWORD_BGTZ,
|
|
132
|
+
KEYWORD_BGTZAL,
|
|
133
|
+
KEYWORD_BLEZ,
|
|
134
|
+
KEYWORD_BLEZAL,
|
|
135
|
+
KEYWORD_BLTZ,
|
|
136
|
+
KEYWORD_BLTZAL,
|
|
137
|
+
KEYWORD_BNAN,
|
|
138
|
+
KEYWORD_BDNS,
|
|
139
|
+
KEYWORD_BDNSAL,
|
|
140
|
+
KEYWORD_BDSE,
|
|
141
|
+
KEYWORD_BDSEAL,
|
|
142
|
+
KEYWORD_BREQZ,
|
|
143
|
+
KEYWORD_BRNEZ,
|
|
144
|
+
KEYWORD_BRGEZ,
|
|
145
|
+
KEYWORD_BRGTZ,
|
|
146
|
+
KEYWORD_BRLEZ,
|
|
147
|
+
KEYWORD_BRLTZ,
|
|
148
|
+
KEYWORD_BRNAN,
|
|
149
|
+
KEYWORD_BRDNS,
|
|
150
|
+
KEYWORD_BRDSE,
|
|
151
|
+
KEYWORD_SEQZ,
|
|
152
|
+
KEYWORD_SNEZ,
|
|
153
|
+
KEYWORD_SGEZ,
|
|
154
|
+
KEYWORD_SGTZ,
|
|
155
|
+
KEYWORD_SLEZ,
|
|
156
|
+
KEYWORD_SLTZ,
|
|
157
|
+
KEYWORD_SNAN,
|
|
158
|
+
KEYWORD_SNANZ,
|
|
159
|
+
KEYWORD_SDNS,
|
|
160
|
+
KEYWORD_SDSE,
|
|
161
|
+
|
|
162
|
+
/* 关键字 - 三元指令 */
|
|
163
|
+
KEYWORD_AND,
|
|
164
|
+
KEYWORD_NOR,
|
|
165
|
+
KEYWORD_OR,
|
|
166
|
+
KEYWORD_SLA,
|
|
167
|
+
KEYWORD_SLL,
|
|
168
|
+
KEYWORD_SRA,
|
|
169
|
+
KEYWORD_SRL,
|
|
170
|
+
KEYWORD_XOR,
|
|
171
|
+
KEYWORD_GET,
|
|
172
|
+
KEYWORD_PUT,
|
|
173
|
+
KEYWORD_L,
|
|
174
|
+
KEYWORD_LS,
|
|
175
|
+
KEYWORD_LR,
|
|
176
|
+
KEYWORD_S,
|
|
177
|
+
KEYWORD_SB,
|
|
178
|
+
KEYWORD_ROL,
|
|
179
|
+
KEYWORD_ROR,
|
|
180
|
+
KEYWORD_RMAP,
|
|
181
|
+
KEYWORD_BEQ,
|
|
182
|
+
KEYWORD_BEQAL,
|
|
183
|
+
KEYWORD_BNE,
|
|
184
|
+
KEYWORD_BNEAL,
|
|
185
|
+
KEYWORD_BGE,
|
|
186
|
+
KEYWORD_BGEAL,
|
|
187
|
+
KEYWORD_BGT,
|
|
188
|
+
KEYWORD_BGTAL,
|
|
189
|
+
KEYWORD_BLE,
|
|
190
|
+
KEYWORD_BLEAL,
|
|
191
|
+
KEYWORD_BLT,
|
|
192
|
+
KEYWORD_BLTAL,
|
|
193
|
+
KEYWORD_BAPZ,
|
|
194
|
+
KEYWORD_BAPZAL,
|
|
195
|
+
KEYWORD_BNAZ,
|
|
196
|
+
KEYWORD_BNAZAL,
|
|
197
|
+
KEYWORD_BDNVL,
|
|
198
|
+
KEYWORD_BDNVS,
|
|
199
|
+
KEYWORD_BREQ,
|
|
200
|
+
KEYWORD_BRNE,
|
|
201
|
+
KEYWORD_BRGE,
|
|
202
|
+
KEYWORD_BRGT,
|
|
203
|
+
KEYWORD_BRLE,
|
|
204
|
+
KEYWORD_BRLT,
|
|
205
|
+
KEYWORD_BRAPZ,
|
|
206
|
+
KEYWORD_BRNAZ,
|
|
207
|
+
KEYWORD_SAPZ,
|
|
208
|
+
KEYWORD_SNAZ,
|
|
209
|
+
KEYWORD_SEQ,
|
|
210
|
+
KEYWORD_SNE,
|
|
211
|
+
KEYWORD_SGE,
|
|
212
|
+
KEYWORD_SGT,
|
|
213
|
+
KEYWORD_SLE,
|
|
214
|
+
KEYWORD_SLT,
|
|
215
|
+
|
|
216
|
+
/* 关键字 - 四元指令 */
|
|
217
|
+
KEYWORD_LERP,
|
|
218
|
+
KEYWORD_CLAMP,
|
|
219
|
+
KEYWORD_EXT,
|
|
220
|
+
KEYWORD_INS,
|
|
221
|
+
KEYWORD_SS,
|
|
222
|
+
KEYWORD_LB,
|
|
223
|
+
KEYWORD_SBN,
|
|
224
|
+
KEYWORD_SBS,
|
|
225
|
+
KEYWORD_BAP,
|
|
226
|
+
KEYWORD_BAPAL,
|
|
227
|
+
KEYWORD_BNA,
|
|
228
|
+
KEYWORD_BNAAL,
|
|
229
|
+
KEYWORD_BRAP,
|
|
230
|
+
KEYWORD_BRNA,
|
|
231
|
+
KEYWORD_SAP,
|
|
232
|
+
KEYWORD_SNA,
|
|
233
|
+
KEYWORD_SELECT,
|
|
234
|
+
|
|
235
|
+
/* 关键字 - 五元指令 */
|
|
236
|
+
KEYWORD_LBN,
|
|
237
|
+
KEYWORD_LBS,
|
|
238
|
+
|
|
239
|
+
/* 关键字 - 六元指令 */
|
|
240
|
+
KEYWORD_LBNS
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* IC10 词法标记类别枚举。
|
|
246
|
+
*
|
|
247
|
+
* 对应 C++ `ic10::TokenCategory`,值从 0 开始递增。
|
|
248
|
+
* 运行时由 C++ 端通过 `enum_to_str` 编译期反射导出,
|
|
249
|
+
* 保证与 C++ 枚举定义自动同步。
|
|
250
|
+
*
|
|
251
|
+
* @public
|
|
252
|
+
*/
|
|
253
|
+
export enum TokenCategory {
|
|
254
|
+
/** 字面值(数字、字符串、关键字等) */
|
|
255
|
+
LITERAL = 0,
|
|
256
|
+
/** 符号(括号、冒号等) */
|
|
257
|
+
SYMBOL,
|
|
258
|
+
/** 注释 */
|
|
259
|
+
COMMENT,
|
|
260
|
+
/** 注解(文档注释、类型提示) */
|
|
261
|
+
ANNOTATION,
|
|
262
|
+
/** 空白符 */
|
|
263
|
+
WHITESPACE,
|
|
264
|
+
/** 文件结束 */
|
|
265
|
+
END,
|
|
266
|
+
/** 无效标记 */
|
|
267
|
+
INVALID
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* @summary 词法单元类
|
|
273
|
+
*
|
|
274
|
+
* @desc 表示 IC10 源代码中的最小语义单元。
|
|
275
|
+
* 词法单元包括关键字(如 `move`、`add`)、标识符、数字、运算符等。
|
|
276
|
+
*
|
|
277
|
+
* Token 是词法分析的结果,作为语法分析器的输入。
|
|
278
|
+
*
|
|
279
|
+
* @public
|
|
280
|
+
*/
|
|
281
|
+
export class Token {
|
|
282
|
+
/**
|
|
283
|
+
* @summary 构造函数
|
|
284
|
+
*
|
|
285
|
+
* @param type - Token 类型(对应 ic10::TokenType 枚举)
|
|
286
|
+
* @param pos - 位置对象,记录该 Token 在源代码中的位置
|
|
287
|
+
* @param lexeme - 词素,即源代码中的原始字符串
|
|
288
|
+
* @param category - Token 类别(对应 ic10::TokenCategory 枚举,可选)
|
|
289
|
+
*
|
|
290
|
+
* @example
|
|
291
|
+
* ```typescript
|
|
292
|
+
* const pos = new ic10.Pos();
|
|
293
|
+
* pos.line = 0;
|
|
294
|
+
* pos.column = 0;
|
|
295
|
+
* const token = new ic10.Token(TokenType.KEYWORD_MOVE, pos, 'move', TokenCategory.LITERAL);
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
constructor(type: TokenType, pos: Pos, lexeme?: string, category?: TokenCategory);
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @summary Token 类型
|
|
302
|
+
* @desc 对应 ic10::TokenType 枚举值,表示 Token 的语法类别
|
|
303
|
+
*/
|
|
304
|
+
type: TokenType;
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* @summary 位置信息
|
|
308
|
+
* @desc 该 Token 在源代码中的起始位置
|
|
309
|
+
*/
|
|
310
|
+
pos: Pos;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* @summary 词素
|
|
314
|
+
* @desc 源代码中匹配该 Token 的原始字符串
|
|
315
|
+
*/
|
|
316
|
+
lexeme: string;
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* @summary Token 类别
|
|
320
|
+
* @desc 对应 ic10::TokenCategory 枚举值,提供更细粒度的分类
|
|
321
|
+
*/
|
|
322
|
+
category: TokenCategory;
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* @summary 返回可读字符串表示
|
|
326
|
+
*
|
|
327
|
+
* @returns 格式化的字符串,如 `Token{type=1, lexeme="move"}`
|
|
328
|
+
*
|
|
329
|
+
* @desc 用于调试目的,返回人类可读的 Token 描述。
|
|
330
|
+
*/
|
|
331
|
+
toString(): string;
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* @summary 返回 JSON 字符串表示
|
|
335
|
+
*
|
|
336
|
+
* @returns JSON 格式的 Token 表示
|
|
337
|
+
*
|
|
338
|
+
* @desc 返回包含 type、pos、lexeme、category 的 JSON 对象字符串。
|
|
339
|
+
*/
|
|
340
|
+
toJSON(): string;
|
|
341
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Copyright (c) 2026. All rights reserved.
|
|
2
|
+
// This source code is licensed under the CC BY-NC-SA
|
|
3
|
+
// (Creative Commons Attribution-NonCommercial-NoDerivatives) License, By Xiao Songtao.
|
|
4
|
+
// This software is protected by copyright law. Reproduction, distribution, or use for commercial
|
|
5
|
+
// purposes is prohibited without the author's permission. If you have any questions or require
|
|
6
|
+
// permission, please contact the author: edocsitahw@qq.com
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @file linker.d.ts
|
|
10
|
+
* @author edocsitahw
|
|
11
|
+
* @version 1.1
|
|
12
|
+
* @date 2026/07/22 17:12
|
|
13
|
+
* @desc
|
|
14
|
+
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
|
+
* */
|
|
16
|
+
import { Diagnostic } from "./common";
|
|
17
|
+
import { Program } from "./parser";
|
|
18
|
+
import { SymbolTable } from "./semantic";
|
|
19
|
+
import { TypeTable } from "./semantic/type_table";
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @summary 编译单元信息
|
|
24
|
+
*
|
|
25
|
+
* @desc 表示链接过程中每个编译单元的信息,包括路径和诊断信息。
|
|
26
|
+
*
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
export interface UnitInfo {
|
|
30
|
+
/**
|
|
31
|
+
* @summary 源文件路径
|
|
32
|
+
*/
|
|
33
|
+
path: string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @summary 该单元的诊断信息列表
|
|
37
|
+
*/
|
|
38
|
+
diagnostics: Diagnostic[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @summary 链接器类
|
|
44
|
+
*
|
|
45
|
+
* @desc 用于链接多个 IC10 编译单元,合并它们的符号表并收集所有诊断信息。
|
|
46
|
+
*
|
|
47
|
+
* @elseif en
|
|
48
|
+
* @summary Linker class
|
|
49
|
+
*
|
|
50
|
+
* @desc Used to link multiple IC10 compilation units, merge their symbol tables,
|
|
51
|
+
* and collect all diagnostics.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // 创建链接器并链接多个编译单元
|
|
56
|
+
* const linker = new ic10.Linker();
|
|
57
|
+
*
|
|
58
|
+
* // 添加源代码字符串
|
|
59
|
+
* linker.addUnit('alias sensor0 console0');
|
|
60
|
+
* linker.addUnit('move r0 r1', 'file.ic10');
|
|
61
|
+
*
|
|
62
|
+
* // 添加已解析的 Program 对象
|
|
63
|
+
* const tokens = ic10.Lexer.tokenize('add r2 r0 r1');
|
|
64
|
+
* const parser = new ic10.Parser(tokens);
|
|
65
|
+
* const program = parser.parse();
|
|
66
|
+
* linker.addUnit(program, 'another.ic10');
|
|
67
|
+
*
|
|
68
|
+
* // 执行链接
|
|
69
|
+
* const symbolTable = linker.link();
|
|
70
|
+
*
|
|
71
|
+
* // 检查诊断信息
|
|
72
|
+
* if (linker.diagnostics.length > 0) {
|
|
73
|
+
* console.log('诊断信息:', linker.diagnostics);
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @public
|
|
78
|
+
*/
|
|
79
|
+
export class Linker {
|
|
80
|
+
/**
|
|
81
|
+
* @summary 构造函数
|
|
82
|
+
*
|
|
83
|
+
* @desc 创建一个新的链接器实例。
|
|
84
|
+
*/
|
|
85
|
+
constructor();
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @summary 添加编译单元(Program 对象)
|
|
89
|
+
*
|
|
90
|
+
* @param program - 要链接的 Program 对象
|
|
91
|
+
*
|
|
92
|
+
* @desc 将已解析的 AST 程序添加到链接器中。
|
|
93
|
+
*/
|
|
94
|
+
addUnit(program: Program): void;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @summary 添加编译单元(源代码字符串)
|
|
98
|
+
*
|
|
99
|
+
* @param source - IC10 源代码字符串
|
|
100
|
+
*
|
|
101
|
+
* @desc 将源代码字符串添加到链接器,内部会自动进行词法分析和语法分析。
|
|
102
|
+
*/
|
|
103
|
+
addUnit(source: string): void;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @summary 添加编译单元(带路径)
|
|
107
|
+
*
|
|
108
|
+
* @param program - 要链接的 Program 对象
|
|
109
|
+
* @param path - 源文件路径
|
|
110
|
+
*
|
|
111
|
+
* @desc 将已解析的 AST 程序添加到链接器中,并关联源文件路径。
|
|
112
|
+
*/
|
|
113
|
+
addUnit(program: Program, path: string): void;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @summary 添加编译单元(源代码字符串带路径)
|
|
117
|
+
*
|
|
118
|
+
* @param source - IC10 源代码字符串
|
|
119
|
+
* @param path - 源文件路径
|
|
120
|
+
*
|
|
121
|
+
* @desc 将源代码字符串添加到链接器,内部会自动进行词法分析和语法分析,并关联源文件路径。
|
|
122
|
+
*/
|
|
123
|
+
addUnit(source: string, path: string): void;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @summary 执行链接操作
|
|
127
|
+
*
|
|
128
|
+
* @returns 合并后的 SymbolTable 对象
|
|
129
|
+
*
|
|
130
|
+
* @desc 对所有已添加的编译单元执行语义分析,合并符号表,并返回最终的符号表。
|
|
131
|
+
*/
|
|
132
|
+
link(): SymbolTable;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @summary 诊断列表
|
|
136
|
+
*
|
|
137
|
+
* @desc 链接过程中产生的所有诊断信息(包含错误、警告、提示)。
|
|
138
|
+
* 每个诊断对象包含 level、id、start、end、message 字段。
|
|
139
|
+
*/
|
|
140
|
+
get diagnostics(): Diagnostic[];
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* @summary 编译单元列表
|
|
144
|
+
*
|
|
145
|
+
* @desc 所有已添加的编译单元信息,每个单元包含路径和诊断信息。
|
|
146
|
+
*/
|
|
147
|
+
get units(): UnitInfo[];
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @summary 全局类型表
|
|
151
|
+
*
|
|
152
|
+
* @desc 链接过程中合并的全局类型表,包含所有编译单元通过文档注释定义的设备类型和枚举类型。
|
|
153
|
+
* 应在调用 {@link Linker.link} 之后访问以获取完整结果。
|
|
154
|
+
*/
|
|
155
|
+
get typeTable(): TypeTable;
|
|
156
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Copyright (c) 2026. All rights reserved.
|
|
2
|
+
// This source code is licensed under the CC BY-NC-SA
|
|
3
|
+
// (Creative Commons Attribution-NonCommercial-NoDerivatives) License, By Xiao Songtao.
|
|
4
|
+
// This software is protected by copyright law. Reproduction, distribution, or use for commercial
|
|
5
|
+
// purposes is prohibited without the author's permission. If you have any questions or require
|
|
6
|
+
// permission, please contact the author: edocsitahw@qq.com
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @file locale.d.ts
|
|
10
|
+
* @author edocsitahw
|
|
11
|
+
* @version 1.1
|
|
12
|
+
* @date 2026/07/22 17:21
|
|
13
|
+
* @desc
|
|
14
|
+
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
|
+
* */
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @summary 本地化设置类
|
|
19
|
+
*
|
|
20
|
+
* @desc 提供 IC10 编译器的本地化支持,允许设置错误消息和诊断信息的语言。
|
|
21
|
+
*
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export class IC10CompilerLocal {
|
|
25
|
+
/**
|
|
26
|
+
* @summary 设置编译器的语言环境
|
|
27
|
+
*
|
|
28
|
+
* @param language - 语言代码(如 'en'、'zh' 等)
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* ic10.IC10Local.setLanguage('zh');
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
static setLanguage(language: string): void;
|
|
36
|
+
}
|