ic10r-node 1.0.1 → 1.0.2
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/package.json +1 -1
- package/types/context.d.ts +5 -3
- package/types/engine.d.ts +2 -1
- package/types/memory.d.ts +3 -2
- package/types/common.d.ts +0 -145
- package/types/lexer/index.d.ts +0 -17
- package/types/lexer/token.d.ts +0 -341
- package/types/parser/ast.d.ts +0 -848
- package/types/parser/index.d.ts +0 -19
- package/types/parser/instructions/binary.d.ts +0 -1209
- package/types/parser/instructions/index.d.ts +0 -22
- package/types/parser/instructions/nullary.d.ts +0 -85
- package/types/parser/instructions/quaternary.d.ts +0 -603
- package/types/parser/instructions/quinary.d.ts +0 -150
- package/types/parser/instructions/senary.d.ts +0 -104
- package/types/parser/instructions/ternary.d.ts +0 -1551
- package/types/parser/instructions/unary.d.ts +0 -518
- package/types/parser/parser.d.ts +0 -84
- package/types/parser/program.d.ts +0 -136
package/package.json
CHANGED
package/types/context.d.ts
CHANGED
|
@@ -13,15 +13,17 @@
|
|
|
13
13
|
* @desc
|
|
14
14
|
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
15
|
* */
|
|
16
|
+
import { SymbolTable } from "ic10c-node";
|
|
17
|
+
import type { Config } from "./config";
|
|
18
|
+
import { Program } from "ic10c-node";
|
|
16
19
|
import { Manager } from "./manager";
|
|
17
|
-
import { Program } from "./parser";
|
|
18
|
-
import { Config } from "./config";
|
|
19
20
|
import { Memory } from "./memory";
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
export class Context {
|
|
24
|
+
public config: Config;
|
|
23
25
|
|
|
24
|
-
constructor(program: Program, symbols: SymbolTable,
|
|
26
|
+
constructor(program: Program, symbols: SymbolTable, cfg: Config);
|
|
25
27
|
|
|
26
28
|
pc: number;
|
|
27
29
|
|
package/types/engine.d.ts
CHANGED
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
* @desc
|
|
14
14
|
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
15
|
* */
|
|
16
|
+
import { SymbolTable } from "ic10c-node";
|
|
17
|
+
import { Program } from "ic10c-node";
|
|
16
18
|
import { Context } from "./context";
|
|
17
|
-
import { Program } from "./parser";
|
|
18
19
|
import { Config } from "./config";
|
|
19
20
|
|
|
20
21
|
|
package/types/memory.d.ts
CHANGED
|
@@ -13,14 +13,15 @@
|
|
|
13
13
|
* @desc
|
|
14
14
|
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
15
|
* */
|
|
16
|
-
import { Config } from "./config";
|
|
16
|
+
import type { Config } from "./config";
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
export class Memory {
|
|
20
|
+
public config: Config;
|
|
20
21
|
|
|
21
22
|
public sp: number;
|
|
22
23
|
|
|
23
|
-
constructor(
|
|
24
|
+
constructor(cfg: Config);
|
|
24
25
|
|
|
25
26
|
toJSON(): string;
|
|
26
27
|
|
package/types/common.d.ts
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
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 common.d.ts
|
|
10
|
-
* @author edocsitahw
|
|
11
|
-
* @version 1.1
|
|
12
|
-
* @date 2026/07/22 15:34
|
|
13
|
-
* @desc
|
|
14
|
-
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
|
-
* */
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @summary 位置信息类
|
|
19
|
-
*
|
|
20
|
-
* @desc 表示源代码中的位置,通过行号和列号定位。
|
|
21
|
-
* 词法分析器使用此类记录每个 Token 的起始位置。
|
|
22
|
-
*
|
|
23
|
-
* @note
|
|
24
|
-
* 行号和列号的起始值取决于具体实现,通常从 0 开始。
|
|
25
|
-
*
|
|
26
|
-
* @public
|
|
27
|
-
*/
|
|
28
|
-
export class Pos {
|
|
29
|
-
/**
|
|
30
|
-
* @summary 行号
|
|
31
|
-
* @desc 源代码中的行索引(从 0 或 1 开始)
|
|
32
|
-
*/
|
|
33
|
-
line: number;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @summary 列号
|
|
37
|
-
* @desc 当前行中的字符位置(从 0 或 1 开始)
|
|
38
|
-
*/
|
|
39
|
-
column: number;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @summary 相对于源代码起始位置的字节偏移量
|
|
43
|
-
*/
|
|
44
|
-
offset: number;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @summary 移动到下一行
|
|
48
|
-
*
|
|
49
|
-
* @desc 将位置推进到下一行的起始处(列号归零,行号加一)。
|
|
50
|
-
* 通常在解析换行符时调用。
|
|
51
|
-
*/
|
|
52
|
-
newline(): void;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* @summary 移动到下一个字符
|
|
56
|
-
*
|
|
57
|
-
* @desc 将列号加一,表示读取了一个字符。
|
|
58
|
-
* 通常在解析普通字符时调用。
|
|
59
|
-
*/
|
|
60
|
-
next(): void;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* @summary 移动到指定偏移位置
|
|
64
|
-
*
|
|
65
|
-
* @param index - 目标偏移量(相对于源代码起始位置)
|
|
66
|
-
*
|
|
67
|
-
* @desc 将位置直接设置到指定的字节偏移处。
|
|
68
|
-
* 用于回溯或跳转到特定位置。
|
|
69
|
-
*/
|
|
70
|
-
move(index: number): void;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* @summary 诊断信息
|
|
76
|
-
*
|
|
77
|
-
* @desc 语义分析过程中产生的诊断信息,包含级别、ID、位置和消息。
|
|
78
|
-
* - level: 诊断级别("error" | "warning" | "info")
|
|
79
|
-
* - id: 诊断 ID 字符串(如 "IEA1_2"、"IMP17")
|
|
80
|
-
* - start: 起始位置(Pos 对象)
|
|
81
|
-
* - end: 结束位置(Pos 对象)
|
|
82
|
-
* - message: 诊断消息文本
|
|
83
|
-
*
|
|
84
|
-
* @public
|
|
85
|
-
*/
|
|
86
|
-
export interface Diagnostic {
|
|
87
|
-
/**
|
|
88
|
-
* @summary 诊断级别
|
|
89
|
-
* @desc 诊断的严重级别:error(错误)、warning(警告)、info(提示)。
|
|
90
|
-
*/
|
|
91
|
-
level: "error" | "warning" | "info";
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* @summary 诊断 ID
|
|
95
|
-
* @desc 诊断标识符字符串,如 "IEA1_2"、"IMP17"。
|
|
96
|
-
*/
|
|
97
|
-
id: string;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* @summary 起始位置
|
|
101
|
-
* @desc 诊断信息对应的源代码起始位置。
|
|
102
|
-
*/
|
|
103
|
-
start: Pos;
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* @summary 结束位置
|
|
107
|
-
* @desc 诊断信息对应的源代码结束位置。
|
|
108
|
-
*/
|
|
109
|
-
end: Pos;
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* @summary 诊断消息
|
|
113
|
-
* @desc 诊断信息的文本描述。
|
|
114
|
-
*/
|
|
115
|
-
message: string;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @summary AST 节点在源代码中的位置信息
|
|
121
|
-
*
|
|
122
|
-
* @desc 描述 AST 节点在原始源代码中的位置,用于错误报告、调试和代码导航。
|
|
123
|
-
* 位置信息包括行号和列号,从 0 或 1 开始取决于具体实现。
|
|
124
|
-
*
|
|
125
|
-
* @public
|
|
126
|
-
*/
|
|
127
|
-
export interface Position {
|
|
128
|
-
/**
|
|
129
|
-
* @summary 行号
|
|
130
|
-
* @desc 源代码中的行索引(从 0 或 1 开始)
|
|
131
|
-
*/
|
|
132
|
-
line: number;
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* @summary 列号
|
|
136
|
-
* @desc 当前行中的字符位置(从 0 或 1 开始)
|
|
137
|
-
*/
|
|
138
|
-
column: number;
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* @summary 字节偏移量
|
|
142
|
-
* @desc 从源代码起始位置到该节点的字节偏移量
|
|
143
|
-
*/
|
|
144
|
-
offset: number;
|
|
145
|
-
}
|
package/types/lexer/index.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
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 index.d.ts
|
|
10
|
-
* @author edocsitahw
|
|
11
|
-
* @version 1.1
|
|
12
|
-
* @date 2026/07/22 17:17
|
|
13
|
-
* @desc
|
|
14
|
-
* @copyright CC BY-NC-SA 2026. All rights reserved.
|
|
15
|
-
* */
|
|
16
|
-
|
|
17
|
-
export * from "./token"
|
package/types/lexer/token.d.ts
DELETED
|
@@ -1,341 +0,0 @@
|
|
|
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
|
-
}
|