meaoiu 0.1.1 → 0.1.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/dist/api/execution.d.ts.map +1 -1
- package/dist/api/execution.js +3 -3
- package/dist/api/execution.js.map +1 -1
- package/dist/api/serviceState.d.ts.map +1 -1
- package/dist/api/serviceState.js +3 -6
- package/dist/api/serviceState.js.map +1 -1
- package/dist/api/services/formatting.d.ts.map +1 -1
- package/dist/api/services/formatting.js +4 -6
- package/dist/api/services/formatting.js.map +1 -1
- package/dist/api/utils/symbolAnalyzer.d.ts +1 -2
- package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -1
- package/dist/api/utils/symbolAnalyzer.js +25 -9
- package/dist/api/utils/symbolAnalyzer.js.map +1 -1
- package/dist/api/utils/symbolTable.d.ts +3 -3
- package/dist/api/utils/symbolTable.d.ts.map +1 -1
- package/dist/cli/main.js +1 -1
- package/dist/core/builtIns.d.ts +4 -3
- package/dist/core/builtIns.d.ts.map +1 -1
- package/dist/core/builtIns.js +4 -6
- package/dist/core/builtIns.js.map +1 -1
- package/dist/core/error.d.ts +4 -11
- package/dist/core/error.d.ts.map +1 -1
- package/dist/core/error.js +9 -20
- package/dist/core/error.js.map +1 -1
- package/dist/core/lexer/tokenizer.d.ts +3 -0
- package/dist/core/lexer/tokenizer.d.ts.map +1 -1
- package/dist/core/lexer/tokenizer.js +76 -84
- package/dist/core/lexer/tokenizer.js.map +1 -1
- package/dist/core/parser.d.ts +1 -77
- package/dist/core/parser.d.ts.map +1 -1
- package/dist/core/parser.js +38 -32
- package/dist/core/parser.js.map +1 -1
- package/dist/core/run/environment.d.ts.map +1 -1
- package/dist/core/run/environment.js +1 -2
- package/dist/core/run/environment.js.map +1 -1
- package/dist/core/run/interpreter.d.ts.map +1 -1
- package/dist/core/run/interpreter.js +7 -7
- package/dist/core/run/interpreter.js.map +1 -1
- package/dist/core/typedef.d.ts +16 -7
- package/dist/core/typedef.d.ts.map +1 -1
- package/dist/core/typedef.js +10 -10
- package/dist/core/typedef.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// src/core/lexer/tokenizer.ts
|
|
2
2
|
import { preprocess } from './preprocessor.js';
|
|
3
|
-
import {
|
|
3
|
+
import { builtInNameSet } from '../builtIns.js';
|
|
4
|
+
export function newToken(kind, value, startLine, startCol, endLine, endCol) {
|
|
5
|
+
return { kind, value, line: startLine, col: startCol, endLine, endCol };
|
|
6
|
+
}
|
|
4
7
|
const KEYWORDS = {
|
|
5
8
|
蹭: 1 /* TokenKind.KEYWORD_USE */,
|
|
6
9
|
就是: 2 /* TokenKind.ASSIGNMENT_IS */,
|
|
@@ -33,24 +36,26 @@ const ID_CONTINUE_REGEX = /[\p{ID_Continue}]/v;
|
|
|
33
36
|
const isNumChar = (char) => char >= '0' && char <= '9';
|
|
34
37
|
export function tokenize(sourceCode, options) {
|
|
35
38
|
const { ignoreComments = true, convertNonAscii = true, useOnebased = true } = options ?? {};
|
|
36
|
-
const OriginBase = +useOnebased;
|
|
37
39
|
if (convertNonAscii)
|
|
38
40
|
sourceCode = preprocess(sourceCode);
|
|
39
41
|
const sourceCodeLen = sourceCode.length;
|
|
40
|
-
|
|
41
|
-
const functionNames = new Set(MeaoiuBuiltInNames);
|
|
42
|
-
let expectingFuncNameAfterParamEnd = false;
|
|
42
|
+
const OriginBase = +useOnebased;
|
|
43
43
|
const tokens = [];
|
|
44
44
|
let line = OriginBase, col = OriginBase, cursor = 0;
|
|
45
45
|
const charAt = (cursor) => String.fromCodePoint(sourceCode.codePointAt(cursor));
|
|
46
|
-
const advance = (steps
|
|
46
|
+
const advance = (steps) => {
|
|
47
47
|
const target = cursor + steps;
|
|
48
48
|
const end = Math.min(target, sourceCodeLen);
|
|
49
49
|
while (cursor < end)
|
|
50
50
|
sourceCode[cursor++] === '\n' ? (line++, (col = OriginBase)) : col++;
|
|
51
51
|
cursor = target;
|
|
52
52
|
};
|
|
53
|
-
|
|
53
|
+
const functionNames = new Set(builtInNameSet); // 小本本:记函数
|
|
54
|
+
const susIdIndexes = []; // 嫌疑标识符名单
|
|
55
|
+
let funcCallState = 0 /* FuncCallState.OK */; // 自然衰变的神奇喵喵标签
|
|
56
|
+
scanSourceCode: for (let funcDefState = 0 /* FuncDefState.NOT_DEF */; cursor < sourceCodeLen; funcCallState++ === -2 /* FuncCallState.MISSED */
|
|
57
|
+
? (susIdIndexes.push(tokens.length - 2), (funcCallState = 1 /* FuncCallState.PASSED */))
|
|
58
|
+
: 0) {
|
|
54
59
|
const startLine = line;
|
|
55
60
|
const startCol = col;
|
|
56
61
|
const char = charAt(cursor);
|
|
@@ -78,25 +83,22 @@ export function tokenize(sourceCode, options) {
|
|
|
78
83
|
i--; // 退一步,把最后的 ')' 排除在截取范围外
|
|
79
84
|
if (!ignoreComments) {
|
|
80
85
|
const commentContent = sourceCode.slice(contentStart, i);
|
|
81
|
-
tokens.push(
|
|
86
|
+
tokens.push(newToken(43 /* TokenKind.COMMENT */, commentContent, startLine, startCol, line, col));
|
|
82
87
|
}
|
|
83
88
|
continue;
|
|
84
89
|
}
|
|
85
90
|
// 关键字
|
|
86
|
-
let matchedKeyword;
|
|
87
91
|
for (const keyword of sortedKeywords) {
|
|
88
|
-
if (sourceCode.startsWith(keyword, cursor))
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (matchedKeyword) {
|
|
94
|
-
const tokenKind = KEYWORDS[matchedKeyword];
|
|
95
|
-
tokens.push({ kind: tokenKind, value: matchedKeyword, line: startLine, col: startCol });
|
|
96
|
-
advance(matchedKeyword.length);
|
|
92
|
+
if (!sourceCode.startsWith(keyword, cursor))
|
|
93
|
+
continue;
|
|
94
|
+
const tokenKind = KEYWORDS[keyword];
|
|
95
|
+
advance(keyword.length);
|
|
96
|
+
tokens.push(newToken(tokenKind, keyword, startLine, startCol, line, col));
|
|
97
97
|
if (tokenKind === 12 /* TokenKind.KEYWORD_DEF */)
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
funcDefState = 1 /* FuncDefState.PASS_PARAM */;
|
|
99
|
+
else if (tokenKind === 13 /* TokenKind.KEYWORD_CALL */)
|
|
100
|
+
funcCallState = -1 /* FuncCallState.SEEK_PARAM */;
|
|
101
|
+
continue scanSourceCode;
|
|
100
102
|
}
|
|
101
103
|
// 二字原子
|
|
102
104
|
doubleCharAtomic: if (cursor + 1 < sourceCodeLen) {
|
|
@@ -120,6 +122,7 @@ export function tokenize(sourceCode, options) {
|
|
|
120
122
|
break;
|
|
121
123
|
case '=]':
|
|
122
124
|
kind = 21 /* TokenKind.COLLECTION_END */;
|
|
125
|
+
funcDefState &&= 2 /* FuncDefState.GET_NAME */;
|
|
123
126
|
break;
|
|
124
127
|
case '[#':
|
|
125
128
|
kind = 22 /* TokenKind.BLOCK_START */;
|
|
@@ -130,10 +133,8 @@ export function tokenize(sourceCode, options) {
|
|
|
130
133
|
default:
|
|
131
134
|
break doubleCharAtomic;
|
|
132
135
|
}
|
|
133
|
-
tokens.push({ kind, value: twoCharSymbol, line: startLine, col: startCol });
|
|
134
136
|
advance(2);
|
|
135
|
-
|
|
136
|
-
expectingFuncNameAfterParamEnd = false;
|
|
137
|
+
tokens.push(newToken(kind, twoCharSymbol, startLine, startCol, line, col));
|
|
137
138
|
continue;
|
|
138
139
|
}
|
|
139
140
|
// 单字原子
|
|
@@ -166,12 +167,14 @@ export function tokenize(sourceCode, options) {
|
|
|
166
167
|
break;
|
|
167
168
|
case '~':
|
|
168
169
|
kind = 24 /* TokenKind.TERMINATOR */;
|
|
170
|
+
if (funcDefState === 2 /* FuncDefState.GET_NAME */)
|
|
171
|
+
funcDefState = 0 /* FuncDefState.NOT_DEF */;
|
|
169
172
|
break;
|
|
170
173
|
default:
|
|
171
174
|
break singleCharAtomic;
|
|
172
175
|
}
|
|
173
|
-
|
|
174
|
-
|
|
176
|
+
advance(1);
|
|
177
|
+
tokens.push(newToken(kind, char, startLine, startCol, line, col));
|
|
175
178
|
continue;
|
|
176
179
|
}
|
|
177
180
|
// 非负数字,十进制整数及小数
|
|
@@ -180,13 +183,12 @@ export function tokenize(sourceCode, options) {
|
|
|
180
183
|
while (i < sourceCodeLen && isNumChar(sourceCode[i]))
|
|
181
184
|
i++;
|
|
182
185
|
if (i + 1 < sourceCodeLen && sourceCode[i] === '.' && isNumChar(sourceCode[i + 1])) {
|
|
183
|
-
i++;
|
|
184
|
-
|
|
185
|
-
i++;
|
|
186
|
+
for (i++; i < sourceCodeLen && isNumChar(sourceCode[i]); i++)
|
|
187
|
+
;
|
|
186
188
|
}
|
|
187
189
|
const numStr = sourceCode.slice(cursor, i);
|
|
188
190
|
advance(i - cursor);
|
|
189
|
-
tokens.push(
|
|
191
|
+
tokens.push(newToken(15 /* TokenKind.NUMBER */, numStr, startLine, startCol, line, col));
|
|
190
192
|
continue;
|
|
191
193
|
}
|
|
192
194
|
// 字符串
|
|
@@ -197,107 +199,97 @@ export function tokenize(sourceCode, options) {
|
|
|
197
199
|
i++;
|
|
198
200
|
const str = sourceCode.slice(contentStart, i);
|
|
199
201
|
advance(i - cursor + charLen);
|
|
200
|
-
tokens.push(
|
|
202
|
+
tokens.push(newToken(16 /* TokenKind.STRING */, str, startLine, startCol, line, col));
|
|
201
203
|
continue;
|
|
202
204
|
}
|
|
203
205
|
// 标识符
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
206
|
+
const isCurlyIdentifier = char === '{';
|
|
207
|
+
if (isCurlyIdentifier || ID_START_REGEX.test(char)) {
|
|
208
|
+
let identifierStartCol = startCol, contentStart = cursor, i = cursor;
|
|
209
|
+
scanId: if (isCurlyIdentifier) {
|
|
210
|
+
funcCallState = 0 /* FuncCallState.OK */;
|
|
211
|
+
contentStart = i += charLen; // 跳过 '{' 并记录内容起点
|
|
208
212
|
identifierStartCol += charLen; // 记录标识符真正的起始列
|
|
209
213
|
while (i < sourceCodeLen && sourceCode[i] !== '}')
|
|
210
214
|
i++;
|
|
211
|
-
|
|
215
|
+
if (i !== contentStart)
|
|
216
|
+
break scanId;
|
|
217
|
+
// 空白则记录错误并跳出
|
|
218
|
+
advance(2); // 跳过一对 '{}'
|
|
219
|
+
tokens.push(newToken(0 /* TokenKind.ERROR */, sourceCode.slice(i - 1, i + 1), startLine, startCol, line, col));
|
|
220
|
+
continue;
|
|
212
221
|
}
|
|
213
222
|
else {
|
|
214
|
-
|
|
223
|
+
if (funcCallState === 0 /* FuncCallState.SEEKING_PARAM */)
|
|
224
|
+
funcCallState = -3 /* FuncCallState.SEEK_NAME */;
|
|
225
|
+
else if (funcCallState === -2 /* FuncCallState.SEEKING_NAME */)
|
|
226
|
+
funcCallState = 0 /* FuncCallState.OK */;
|
|
227
|
+
while (i < sourceCodeLen) {
|
|
215
228
|
const idChar = charAt(i);
|
|
216
229
|
if (!ID_CONTINUE_REGEX.test(idChar))
|
|
217
230
|
break;
|
|
218
|
-
// 有粘连的关键字则打断
|
|
219
231
|
for (const keyword of sortedKeywords)
|
|
220
232
|
if (sourceCode.startsWith(keyword, i))
|
|
221
|
-
break
|
|
233
|
+
break scanId; // 有粘连的关键字则打断
|
|
222
234
|
i += idChar.length;
|
|
223
235
|
}
|
|
224
|
-
identifier = sourceCode.slice(cursor, i);
|
|
225
236
|
}
|
|
226
237
|
advance(i - cursor);
|
|
227
238
|
// 统一创建标识符词元
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
if (expectingFuncNameAfterParamEnd) {
|
|
236
|
-
// 抓到了!这个标识符就是函数名喵!
|
|
237
|
-
functionNames.add(identifier);
|
|
238
|
-
expectingFuncNameAfterParamEnd = false; // 重置状态
|
|
239
|
-
}
|
|
239
|
+
const identifier = sourceCode.slice(contentStart, i); // 截取标识
|
|
240
|
+
tokens.push(newToken(19 /* TokenKind.IDENTIFIER */, identifier, startLine, identifierStartCol, line, col));
|
|
241
|
+
if (isCurlyIdentifier)
|
|
242
|
+
advance(1); // 跳过闭合的 '}'
|
|
243
|
+
if (funcDefState === 2 /* FuncDefState.GET_NAME */) {
|
|
244
|
+
functionNames.add(identifier); // 抓到了!这个标识符就是函数名喵!
|
|
245
|
+
funcDefState = 0 /* FuncDefState.NOT_DEF */; // 重置状态
|
|
240
246
|
}
|
|
241
247
|
continue;
|
|
242
248
|
}
|
|
243
249
|
// 不认识的字符喵
|
|
244
|
-
tokens.push({ kind: 0 /* TokenKind.ERROR */, value: char, line: startLine, col: startCol });
|
|
245
|
-
console.error('不认识的字符喵:', char);
|
|
246
250
|
advance(charLen);
|
|
251
|
+
tokens.push(newToken(0 /* TokenKind.ERROR */, char, startLine, startCol, line, col));
|
|
252
|
+
console.error('不认识的字符喵:', char);
|
|
247
253
|
}
|
|
248
|
-
|
|
249
|
-
|
|
254
|
+
if (funcCallState === -2 /* FuncCallState.MISSED */)
|
|
255
|
+
susIdIndexes.push(tokens.length - 1); // 补尾
|
|
256
|
+
tokens.push(newToken(44 /* TokenKind.EOF */, 'EndOfFile', line, col, line, col));
|
|
257
|
+
return susIdIndexes.length ? repairCallTokens(tokens, functionNames, susIdIndexes) : tokens;
|
|
250
258
|
}
|
|
251
259
|
/**
|
|
252
260
|
* 遍历原始 Token 列表,修复被错误合并的 `扒纸箱名函数名`。
|
|
253
261
|
*/
|
|
254
|
-
function repairCallTokens(tokens, functionNames) {
|
|
255
|
-
//
|
|
256
|
-
// 这样能确保 `喵` 不会错误地匹配 `xxx高级喵` 的 `喵`
|
|
262
|
+
function repairCallTokens(tokens, functionNames, indexesToSplit) {
|
|
263
|
+
// 按长度降序排序,确保 `喵` 不会错误地匹配 `xxx高级喵` 的 `喵`
|
|
257
264
|
const sortedFunctionNames = Array.from(functionNames).sort((a, b) => b.length - a.length);
|
|
258
265
|
const repairedTokens = [];
|
|
259
|
-
|
|
260
|
-
let i = 0;
|
|
261
|
-
scanTokens: while (i < lastIndex) {
|
|
266
|
+
scanTokens: for (let i = 0, j = 0, indexToSplit = indexesToSplit[j]; i < tokens.length; i++) {
|
|
262
267
|
const currentToken = tokens[i];
|
|
263
|
-
const nextToken = tokens[i + 1];
|
|
264
268
|
// 检查是否是需要修复的目标
|
|
265
|
-
if (
|
|
266
|
-
nextToken.kind !== 19 /* TokenKind.IDENTIFIER */ || // 后面无跟着的标识符
|
|
267
|
-
tokens[i + 2]?.kind === 19 /* TokenKind.IDENTIFIER */ // 后面跟着第二个标识符
|
|
268
|
-
) {
|
|
269
|
-
// 不是需要修复的目标,或者是一个安全的 `扒 纸箱名 函数名`
|
|
269
|
+
if (i !== indexToSplit) {
|
|
270
270
|
repairedTokens.push(currentToken);
|
|
271
|
-
i++;
|
|
272
271
|
continue;
|
|
273
272
|
}
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
indexToSplit = indexesToSplit[Math.min(++j, indexesToSplit.length - 1)];
|
|
274
|
+
// 匹配潜在目标
|
|
275
|
+
const { value: valueToSplit, line, col, endLine, endCol } = currentToken;
|
|
276
276
|
for (const funcName of sortedFunctionNames) {
|
|
277
277
|
// 检查这个函数名是不是标识符的后缀
|
|
278
|
-
if (
|
|
278
|
+
if (valueToSplit.length <= funcName.length || !valueToSplit.endsWith(funcName))
|
|
279
279
|
continue;
|
|
280
280
|
// 找到了!是它喵!
|
|
281
281
|
const collectionName = valueToSplit.slice(0, -funcName.length);
|
|
282
|
+
const splitCol = col + collectionName.length;
|
|
282
283
|
// 创建 “纸箱名” 及 “函数名”
|
|
283
|
-
const collectionToken =
|
|
284
|
-
const functionToken =
|
|
285
|
-
kind: 19 /* TokenKind.IDENTIFIER */,
|
|
286
|
-
value: funcName,
|
|
287
|
-
line,
|
|
288
|
-
col: col + collectionName.length,
|
|
289
|
-
};
|
|
284
|
+
const collectionToken = newToken(19 /* TokenKind.IDENTIFIER */, collectionName, line, col, line, splitCol);
|
|
285
|
+
const functionToken = newToken(19 /* TokenKind.IDENTIFIER */, funcName, line, splitCol, endLine, endCol);
|
|
290
286
|
// 推入修复后的版本
|
|
291
|
-
repairedTokens.push(
|
|
292
|
-
i += 2; // 跳过 '扒' 和 '纸箱名函数名' 这两个原始 Token
|
|
287
|
+
repairedTokens.push(collectionToken /*纸箱名*/, functionToken /*函数名*/);
|
|
293
288
|
continue scanTokens; // 匹配成功,检查下一组词元
|
|
294
289
|
}
|
|
295
|
-
//
|
|
290
|
+
// 无匹配关键字,照常推入
|
|
296
291
|
repairedTokens.push(currentToken);
|
|
297
|
-
i++;
|
|
298
292
|
}
|
|
299
|
-
if (i <= lastIndex)
|
|
300
|
-
repairedTokens.push(tokens[i]); // 补尾
|
|
301
293
|
return repairedTokens;
|
|
302
294
|
}
|
|
303
295
|
//# sourceMappingURL=tokenizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../src/core/lexer/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../src/core/lexer/tokenizer.ts"],"names":[],"mappings":"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"}
|
package/dist/core/parser.d.ts
CHANGED
|
@@ -9,81 +9,5 @@ export type ParseResult = {
|
|
|
9
9
|
program: AST.Program;
|
|
10
10
|
errors: MeaoiuError[];
|
|
11
11
|
};
|
|
12
|
-
export declare
|
|
13
|
-
private readonly tokens;
|
|
14
|
-
private readonly MODE;
|
|
15
|
-
private readonly MAX_POS;
|
|
16
|
-
private readonly blockDepth;
|
|
17
|
-
private readonly errors;
|
|
18
|
-
private position;
|
|
19
|
-
private commentBuffer;
|
|
20
|
-
constructor(tokens: Token[], mode?: ParseMode);
|
|
21
|
-
private current;
|
|
22
|
-
private peek;
|
|
23
|
-
/**
|
|
24
|
-
* 返回当前位置的「非悄悄话 token」,并将位置推进到下一个 token(非悄悄话或 EOF),
|
|
25
|
-
* 同时把遇到的悄悄话收集到 commentBuffer
|
|
26
|
-
* @returns 当前位置的 token(非 COMMENT)
|
|
27
|
-
*/
|
|
28
|
-
private advance;
|
|
29
|
-
/**
|
|
30
|
-
* 推进位置(同时掠取悄悄话)并取得下一 token
|
|
31
|
-
* @returns 悄悄话之后一个 token 的再下一 token
|
|
32
|
-
*/
|
|
33
|
-
private next;
|
|
34
|
-
/**
|
|
35
|
-
* 返回上一个非悄悄话 token(不动位置)
|
|
36
|
-
* @returns 上一个非悄悄话 token
|
|
37
|
-
*/
|
|
38
|
-
private lookBack;
|
|
39
|
-
/**
|
|
40
|
-
* 取得当前非悄悄话 token,若当前为悄悄话则连续推进至目标(同时收集悄悄话到 commentBuffer)
|
|
41
|
-
* @returns 当前 token 或其后第一个非悄悄话 token(或 EOF)
|
|
42
|
-
*/
|
|
43
|
-
private drainCommentsAhead;
|
|
44
|
-
/**
|
|
45
|
-
* 从缓存中拿走所有待分配的 leading 悄悄话(并清空缓存)
|
|
46
|
-
* @returns 所有待分配的悄悄话
|
|
47
|
-
*/
|
|
48
|
-
private takeLeadingComments;
|
|
49
|
-
/**
|
|
50
|
-
* 把缓存里的悄悄话按是否与 anchorToken 同一行分离:
|
|
51
|
-
* - 同行的视为 trailing(尾随悄悄话),附给 node
|
|
52
|
-
* - 不同的保留为未来节点的 leading(放回 commentBuffer)
|
|
53
|
-
*/
|
|
54
|
-
private collectTrailingComments;
|
|
55
|
-
private endLoc;
|
|
56
|
-
private reportError;
|
|
57
|
-
/**
|
|
58
|
-
* 虚构尾随词元并报告错误。
|
|
59
|
-
* @param kind 虚构词元种类,若无预期则可传 TokenKind.ERROR
|
|
60
|
-
* @returns 虚构 token
|
|
61
|
-
*/
|
|
62
|
-
private makeErrorTail;
|
|
63
|
-
private expect;
|
|
64
|
-
private synchronize;
|
|
65
|
-
private consumeToRecoveryPoint;
|
|
66
|
-
parse(): ParseResult;
|
|
67
|
-
private parseStatement;
|
|
68
|
-
private parseVariableDeclaration;
|
|
69
|
-
private parseAssignmentStatement;
|
|
70
|
-
private parseFunctionDeclaration;
|
|
71
|
-
private parseReturnOrAmbushStatement;
|
|
72
|
-
private parseIdentifier;
|
|
73
|
-
private parseExpression;
|
|
74
|
-
private parseLogicalExpression;
|
|
75
|
-
private parseSequenceExpression;
|
|
76
|
-
private parseComparisonExpression;
|
|
77
|
-
private parseAdditiveExpression;
|
|
78
|
-
private parseMultiplicativeExpression;
|
|
79
|
-
private parseUnaryExpression;
|
|
80
|
-
private parseMemberAccessExpression;
|
|
81
|
-
private parsePrimaryExpression;
|
|
82
|
-
private parseBlockOrIfExpression;
|
|
83
|
-
private parseBlockExpression;
|
|
84
|
-
private parseCollectionElement;
|
|
85
|
-
private parseIfExpression;
|
|
86
|
-
private parseLoopExpression;
|
|
87
|
-
private parseCallExpression;
|
|
88
|
-
}
|
|
12
|
+
export declare function parse(tokens: Token[], mode?: ParseMode): ParseResult;
|
|
89
13
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAMN,KAAK,KAAK,EACV,MAAM,sBAAsB,CAAC;AAE9B,0BAAkB,SAAS;IAC1B,MAAM,IAAA;IACN,QAAQ,IAAA;CACR;AAED,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IACrB,MAAM,EAAE,WAAW,EAAE,CAAC;CACtB,CAAC;AAkqBF,wBAAgB,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,GAAE,SAA4B,GAAG,WAAW,CAEtF"}
|
package/dist/core/parser.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// src/core/parser.ts
|
|
2
2
|
import { MeaoiuError, errorFrom } from './error.js';
|
|
3
|
+
import { newToken, } from './lexer/tokenizer.js';
|
|
3
4
|
const blockKindInfo = [
|
|
4
5
|
{
|
|
5
6
|
name: '想法',
|
|
@@ -19,9 +20,6 @@ const blockKindInfo = [
|
|
|
19
20
|
},
|
|
20
21
|
]; // 0: 想法, 1: 纸箱
|
|
21
22
|
const syntaxErrorFrom = (ele, message) => errorFrom(ele, message, 3 /* Phase.SYNTACTIC */);
|
|
22
|
-
function tokenTrailing({ line, col: prevCol, value: prevValue }, kind, value = '') {
|
|
23
|
-
return { kind, value, line, col: prevCol + prevValue.length };
|
|
24
|
-
}
|
|
25
23
|
function errorNodeWith({ message, line, col, endLine, endCol }) {
|
|
26
24
|
return { kind: 0 /* NodeKind.ErrorNode */, message, line, col, endLine, endCol };
|
|
27
25
|
}
|
|
@@ -62,7 +60,7 @@ function isStartToken(kind) {
|
|
|
62
60
|
function isAssignmentOperator(kind) {
|
|
63
61
|
return kind === 2 /* TokenKind.ASSIGNMENT_IS */ || kind === 3 /* TokenKind.ASSIGNMENT_LIKE */ || kind === 4 /* TokenKind.ASSIGNMENT_ONLY */;
|
|
64
62
|
}
|
|
65
|
-
|
|
63
|
+
class Parser {
|
|
66
64
|
tokens;
|
|
67
65
|
MODE;
|
|
68
66
|
MAX_POS;
|
|
@@ -72,13 +70,14 @@ export class Parser {
|
|
|
72
70
|
// 悄悄话缓存:advance / drainCommentsAhead 会把遇到的 COMMENT 放进这里
|
|
73
71
|
commentBuffer = [];
|
|
74
72
|
constructor(tokens, mode = 0 /* ParseMode.STRICT */) {
|
|
73
|
+
this.MODE = mode;
|
|
75
74
|
// 确保有 EOF 哨兵,避免边界问题
|
|
76
75
|
if (!tokens.length || tokens[tokens.length - 1].kind !== 44 /* TokenKind.EOF */) {
|
|
77
|
-
|
|
76
|
+
const EOF = newToken(44 /* TokenKind.EOF */, 'EndOfFile', -1, -1, -1, -1);
|
|
77
|
+
tokens.push((this.reportError(errorFrom(EOF, '分词器可能坏了喵~', 1 /* Phase.INVARIANT */)), EOF));
|
|
78
78
|
}
|
|
79
79
|
this.tokens = tokens;
|
|
80
80
|
this.MAX_POS = tokens.length - 1;
|
|
81
|
-
this.MODE = mode;
|
|
82
81
|
}
|
|
83
82
|
// 当前 token(安全!)
|
|
84
83
|
current() {
|
|
@@ -151,17 +150,16 @@ export class Parser {
|
|
|
151
150
|
return;
|
|
152
151
|
const trailing = [];
|
|
153
152
|
const remaining = [];
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
// 同一行的视为 trailing,不同一行的留作下一节点的 leading
|
|
154
|
+
for (const comment of this.commentBuffer)
|
|
156
155
|
(comment.line === anchorToken.line ? trailing : remaining).push(comment);
|
|
157
|
-
}
|
|
158
156
|
if (trailing.length)
|
|
159
157
|
(node.trailingComments ??= []).push(...trailing);
|
|
160
158
|
// 将非 trailing 的悄悄话保留为新的 commentBuffer
|
|
161
159
|
this.commentBuffer = remaining;
|
|
162
160
|
}
|
|
163
|
-
endLoc(
|
|
164
|
-
return { endLine
|
|
161
|
+
endLoc({ endLine, endCol } = this.lookBack()) {
|
|
162
|
+
return { endLine, endCol };
|
|
165
163
|
}
|
|
166
164
|
reportError(error) {
|
|
167
165
|
if (this.MODE !== 1 /* ParseMode.TOLERANT */)
|
|
@@ -175,9 +173,9 @@ export class Parser {
|
|
|
175
173
|
*/
|
|
176
174
|
makeErrorTail(kind, why, where) {
|
|
177
175
|
// 找到前一个 token 做锚点
|
|
178
|
-
const
|
|
179
|
-
const fakeTermToken =
|
|
180
|
-
const errMsg = `${where ?? `在「${
|
|
176
|
+
const { endLine, endCol, value } = this.lookBack();
|
|
177
|
+
const fakeTermToken = newToken(kind, '', endLine, endCol, endLine, endCol);
|
|
178
|
+
const errMsg = `${where ?? `在「${value}」后`}${why}`;
|
|
181
179
|
this.reportError(syntaxErrorFrom(fakeTermToken, errMsg));
|
|
182
180
|
return fakeTermToken;
|
|
183
181
|
}
|
|
@@ -189,20 +187,20 @@ export class Parser {
|
|
|
189
187
|
return this.makeErrorTail(kind, why, where);
|
|
190
188
|
}
|
|
191
189
|
synchronize() {
|
|
192
|
-
// 首先尝试找到 TERMINATOR
|
|
190
|
+
// 首先尝试找到 TERMINATOR 或语句开始,跳过闭块符,顺便捕获块配对问题
|
|
193
191
|
for (let tokenKind = this.current().kind; tokenKind !== 44 /* TokenKind.EOF */; tokenKind = this.next().kind) {
|
|
194
192
|
if (tokenKind === 24 /* TokenKind.TERMINATOR */)
|
|
195
193
|
return void this.advance();
|
|
196
194
|
if (isStartToken(tokenKind))
|
|
197
195
|
return;
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
196
|
+
const depthIndex = +(tokenKind === 21 /* TokenKind.COLLECTION_END */);
|
|
197
|
+
if (!depthIndex && tokenKind !== 23 /* TokenKind.BLOCK_END */)
|
|
198
|
+
continue;
|
|
199
|
+
if (this.blockDepth[depthIndex] > 0)
|
|
200
|
+
return;
|
|
201
|
+
const token = this.current();
|
|
202
|
+
this.reportError(syntaxErrorFrom(token, `这个「${token.value}」被孤立了喵!`));
|
|
203
|
+
this.blockDepth[depthIndex] = 0; // 龟苓膏之术,对症下药喵
|
|
206
204
|
}
|
|
207
205
|
}
|
|
208
206
|
// 用于 parseExpression 内部:跳到 terminator / statement start / EOF
|
|
@@ -211,9 +209,8 @@ export class Parser {
|
|
|
211
209
|
;
|
|
212
210
|
}
|
|
213
211
|
parse() {
|
|
214
|
-
const
|
|
215
|
-
const { kind:
|
|
216
|
-
const program = { kind: 1 /* NodeKind.Program */, body: [], line, col, endLine: line, endCol: col };
|
|
212
|
+
const { kind: startKind, line, col, endLine, endCol } = this.current();
|
|
213
|
+
const program = { kind: 1 /* NodeKind.Program */, body: [], line, col, endLine, endCol };
|
|
217
214
|
for (let tokenKind = startKind; tokenKind !== 44 /* TokenKind.EOF */; tokenKind = this.current().kind) {
|
|
218
215
|
if (tokenKind === 24 /* TokenKind.TERMINATOR */)
|
|
219
216
|
this.advance();
|
|
@@ -226,9 +223,7 @@ export class Parser {
|
|
|
226
223
|
(lastStatement.trailingComments ??= []).push(...this.commentBuffer);
|
|
227
224
|
this.commentBuffer = [];
|
|
228
225
|
}
|
|
229
|
-
|
|
230
|
-
program.endLine = endLine;
|
|
231
|
-
program.endCol = endCol + endValue.length;
|
|
226
|
+
({ endLine: program.endLine, endCol: program.endCol } = this.tokens[Math.max(0, this.position - 1)]);
|
|
232
227
|
return { program, errors: this.errors };
|
|
233
228
|
}
|
|
234
229
|
parseStatement() {
|
|
@@ -280,7 +275,7 @@ export class Parser {
|
|
|
280
275
|
return node;
|
|
281
276
|
}
|
|
282
277
|
catch (e) {
|
|
283
|
-
const error = e instanceof MeaoiuError ? e :
|
|
278
|
+
const error = e instanceof MeaoiuError ? e : errorFrom(startToken, String(e), 0 /* Phase.UNKNOWN */);
|
|
284
279
|
this.reportError(error);
|
|
285
280
|
this.synchronize();
|
|
286
281
|
return errorNodeWith(error);
|
|
@@ -481,7 +476,13 @@ export class Parser {
|
|
|
481
476
|
let node;
|
|
482
477
|
switch (tokenKind) {
|
|
483
478
|
case 15 /* TokenKind.NUMBER */:
|
|
484
|
-
node = {
|
|
479
|
+
node = {
|
|
480
|
+
kind: 9 /* NodeKind.NumericLiteral */,
|
|
481
|
+
value: Number.parseFloat(value),
|
|
482
|
+
line,
|
|
483
|
+
col,
|
|
484
|
+
...this.endLoc(startToken),
|
|
485
|
+
};
|
|
485
486
|
break;
|
|
486
487
|
case 16 /* TokenKind.STRING */:
|
|
487
488
|
node = { kind: 10 /* NodeKind.StringLiteral */, value, line, col, ...this.endLoc(startToken) };
|
|
@@ -506,8 +507,10 @@ export class Parser {
|
|
|
506
507
|
case 24 /* TokenKind.TERMINATOR */:
|
|
507
508
|
case 44 /* TokenKind.EOF */:
|
|
508
509
|
throw syntaxErrorFrom(startToken, '只说半句看不懂喵!');
|
|
510
|
+
case 0 /* TokenKind.ERROR */:
|
|
511
|
+
throw errorFrom(startToken, `这个词不对劲喵:${value}`, 2 /* Phase.LEXICAL */);
|
|
509
512
|
default:
|
|
510
|
-
throw syntaxErrorFrom(startToken,
|
|
513
|
+
throw syntaxErrorFrom(startToken, `看不懂的把戏喵:${value}`);
|
|
511
514
|
}
|
|
512
515
|
this.advance();
|
|
513
516
|
if (leading.length)
|
|
@@ -581,4 +584,7 @@ export class Parser {
|
|
|
581
584
|
return { kind: 17 /* NodeKind.CallExpression */, args, callee, line, col, ...this.endLoc() };
|
|
582
585
|
}
|
|
583
586
|
}
|
|
587
|
+
export function parse(tokens, mode = 0 /* ParseMode.STRICT */) {
|
|
588
|
+
return new Parser(tokens, mode).parse();
|
|
589
|
+
}
|
|
584
590
|
//# sourceMappingURL=parser.js.map
|