meaoiu 0.1.0

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.
Files changed (132) hide show
  1. package/LANGUAGE_GUIDE.md +511 -0
  2. package/LICENSE +21 -0
  3. package/README.md +336 -0
  4. package/dist/api/execution.d.ts +9 -0
  5. package/dist/api/execution.d.ts.map +1 -0
  6. package/dist/api/execution.js +17 -0
  7. package/dist/api/execution.js.map +1 -0
  8. package/dist/api/serviceState.d.ts +24 -0
  9. package/dist/api/serviceState.d.ts.map +1 -0
  10. package/dist/api/serviceState.js +53 -0
  11. package/dist/api/serviceState.js.map +1 -0
  12. package/dist/api/services/completions.d.ts +15 -0
  13. package/dist/api/services/completions.d.ts.map +1 -0
  14. package/dist/api/services/completions.js +48 -0
  15. package/dist/api/services/completions.js.map +1 -0
  16. package/dist/api/services/diagnostics.d.ts +9 -0
  17. package/dist/api/services/diagnostics.d.ts.map +1 -0
  18. package/dist/api/services/diagnostics.js +5 -0
  19. package/dist/api/services/diagnostics.js.map +1 -0
  20. package/dist/api/services/formatting.d.ts +2 -0
  21. package/dist/api/services/formatting.d.ts.map +1 -0
  22. package/dist/api/services/formatting.js +223 -0
  23. package/dist/api/services/formatting.js.map +1 -0
  24. package/dist/api/services/highlight.d.ts +14 -0
  25. package/dist/api/services/highlight.d.ts.map +1 -0
  26. package/dist/api/services/highlight.js +58 -0
  27. package/dist/api/services/highlight.js.map +1 -0
  28. package/dist/api/services/inlayHints.d.ts +22 -0
  29. package/dist/api/services/inlayHints.d.ts.map +1 -0
  30. package/dist/api/services/inlayHints.js +100 -0
  31. package/dist/api/services/inlayHints.js.map +1 -0
  32. package/dist/api/services/search.d.ts +17 -0
  33. package/dist/api/services/search.d.ts.map +1 -0
  34. package/dist/api/services/search.js +35 -0
  35. package/dist/api/services/search.js.map +1 -0
  36. package/dist/api/utils/astUtils.d.ts +11 -0
  37. package/dist/api/utils/astUtils.d.ts.map +1 -0
  38. package/dist/api/utils/astUtils.js +106 -0
  39. package/dist/api/utils/astUtils.js.map +1 -0
  40. package/dist/api/utils/lspUtils.d.ts +16 -0
  41. package/dist/api/utils/lspUtils.d.ts.map +1 -0
  42. package/dist/api/utils/lspUtils.js +5 -0
  43. package/dist/api/utils/lspUtils.js.map +1 -0
  44. package/dist/api/utils/symbolAnalyzer.d.ts +37 -0
  45. package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -0
  46. package/dist/api/utils/symbolAnalyzer.js +440 -0
  47. package/dist/api/utils/symbolAnalyzer.js.map +1 -0
  48. package/dist/api/utils/symbolTable.d.ts +28 -0
  49. package/dist/api/utils/symbolTable.d.ts.map +1 -0
  50. package/dist/api/utils/symbolTable.js +3 -0
  51. package/dist/api/utils/symbolTable.js.map +1 -0
  52. package/dist/cli/main.d.ts +3 -0
  53. package/dist/cli/main.d.ts.map +1 -0
  54. package/dist/cli/main.js +92 -0
  55. package/dist/cli/main.js.map +1 -0
  56. package/dist/cli/tools/completer.d.ts +2 -0
  57. package/dist/cli/tools/completer.d.ts.map +1 -0
  58. package/dist/cli/tools/completer.js +24 -0
  59. package/dist/cli/tools/completer.js.map +1 -0
  60. package/dist/cli/tools/diagnoser.d.ts +2 -0
  61. package/dist/cli/tools/diagnoser.d.ts.map +1 -0
  62. package/dist/cli/tools/diagnoser.js +29 -0
  63. package/dist/cli/tools/diagnoser.js.map +1 -0
  64. package/dist/cli/tools/formatter.d.ts +2 -0
  65. package/dist/cli/tools/formatter.d.ts.map +1 -0
  66. package/dist/cli/tools/formatter.js +27 -0
  67. package/dist/cli/tools/formatter.js.map +1 -0
  68. package/dist/cli/tools/searcher.d.ts +4 -0
  69. package/dist/cli/tools/searcher.d.ts.map +1 -0
  70. package/dist/cli/tools/searcher.js +30 -0
  71. package/dist/cli/tools/searcher.js.map +1 -0
  72. package/dist/cli/tools/starter.d.ts +3 -0
  73. package/dist/cli/tools/starter.d.ts.map +1 -0
  74. package/dist/cli/tools/starter.js +23 -0
  75. package/dist/cli/tools/starter.js.map +1 -0
  76. package/dist/cli/tools/toolUtils.d.ts +8 -0
  77. package/dist/cli/tools/toolUtils.d.ts.map +1 -0
  78. package/dist/cli/tools/toolUtils.js +52 -0
  79. package/dist/cli/tools/toolUtils.js.map +1 -0
  80. package/dist/core/ast.d.ts +140 -0
  81. package/dist/core/ast.d.ts.map +1 -0
  82. package/dist/core/ast.js +3 -0
  83. package/dist/core/ast.js.map +1 -0
  84. package/dist/core/builtIns.d.ts +15 -0
  85. package/dist/core/builtIns.d.ts.map +1 -0
  86. package/dist/core/builtIns.js +175 -0
  87. package/dist/core/builtIns.js.map +1 -0
  88. package/dist/core/error.d.ts +41 -0
  89. package/dist/core/error.d.ts.map +1 -0
  90. package/dist/core/error.js +63 -0
  91. package/dist/core/error.js.map +1 -0
  92. package/dist/core/parser.d.ts +89 -0
  93. package/dist/core/parser.d.ts.map +1 -0
  94. package/dist/core/parser.js +578 -0
  95. package/dist/core/parser.js.map +1 -0
  96. package/dist/core/preprocessor.d.ts +2 -0
  97. package/dist/core/preprocessor.d.ts.map +1 -0
  98. package/dist/core/preprocessor.js +187 -0
  99. package/dist/core/preprocessor.js.map +1 -0
  100. package/dist/core/run/environment.d.ts +43 -0
  101. package/dist/core/run/environment.d.ts.map +1 -0
  102. package/dist/core/run/environment.js +192 -0
  103. package/dist/core/run/environment.js.map +1 -0
  104. package/dist/core/run/interpreter.d.ts +13 -0
  105. package/dist/core/run/interpreter.d.ts.map +1 -0
  106. package/dist/core/run/interpreter.js +415 -0
  107. package/dist/core/run/interpreter.js.map +1 -0
  108. package/dist/core/run/io.d.ts +18 -0
  109. package/dist/core/run/io.d.ts.map +1 -0
  110. package/dist/core/run/io.js +34 -0
  111. package/dist/core/run/io.js.map +1 -0
  112. package/dist/core/run/logger.d.ts +12 -0
  113. package/dist/core/run/logger.d.ts.map +1 -0
  114. package/dist/core/run/logger.js +17 -0
  115. package/dist/core/run/logger.js.map +1 -0
  116. package/dist/core/run/value.d.ts +41 -0
  117. package/dist/core/run/value.d.ts.map +1 -0
  118. package/dist/core/run/value.js +37 -0
  119. package/dist/core/run/value.js.map +1 -0
  120. package/dist/core/tokenizer.d.ts +82 -0
  121. package/dist/core/tokenizer.d.ts.map +1 -0
  122. package/dist/core/tokenizer.js +277 -0
  123. package/dist/core/tokenizer.js.map +1 -0
  124. package/dist/core/typedef.d.ts +32 -0
  125. package/dist/core/typedef.d.ts.map +1 -0
  126. package/dist/core/typedef.js +67 -0
  127. package/dist/core/typedef.js.map +1 -0
  128. package/dist/index.d.ts +12 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +13 -0
  131. package/dist/index.js.map +1 -0
  132. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astUtils.js","sourceRoot":"","sources":["../../../src/api/utils/astUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type Position = {
2
+ line: number;
3
+ character: number;
4
+ };
5
+ export type Range = {
6
+ start: Position;
7
+ end: Position;
8
+ };
9
+ export type MeaoiuLocation = {
10
+ line: number;
11
+ col: number;
12
+ endLine: number;
13
+ endCol: number;
14
+ };
15
+ export declare function rangeOf({ line, col, endLine, endCol }: MeaoiuLocation): Range;
16
+ //# sourceMappingURL=lspUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lspUtils.d.ts","sourceRoot":"","sources":["../../../src/api/utils/lspUtils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IACnB,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,QAAQ,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,GAAG,KAAK,CAE7E"}
@@ -0,0 +1,5 @@
1
+ // src/api/utils/lspUtils.ts
2
+ export function rangeOf({ line, col, endLine, endCol }) {
3
+ return { start: { line, character: col }, end: { line: endLine, character: endCol } };
4
+ }
5
+ //# sourceMappingURL=lspUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lspUtils.js","sourceRoot":"","sources":["../../../src/api/utils/lspUtils.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAc5B,MAAM,UAAU,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAkB;IACrE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;AACvF,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type * as AST from '../../core/ast.js';
2
+ import type { MeaoiuBuiltInNames } from '../../core/builtIns.js';
3
+ import { type MeaoiuError } from '../../core/error.js';
4
+ import { type Scope, type SymbolInfo } from './symbolTable.js';
5
+ declare class SymbolAnalyzer {
6
+ readonly errors: MeaoiuError[];
7
+ readonly symbolMap: Map<AST.Node, SymbolInfo>;
8
+ readonly nodeScopeMap: Map<AST.Node, Scope>;
9
+ private currentScope;
10
+ constructor(rootScope: Scope);
11
+ private inferExpressionType;
12
+ visit(node: AST.Node | undefined): void;
13
+ private visitFunctionDeclaration;
14
+ private visitVariableDeclaration;
15
+ private visitAssignmentStatement;
16
+ private visitArithmeticExpression;
17
+ private visitComparisonExpression;
18
+ private visitSequenceExpression;
19
+ private visitComparisonSequence;
20
+ private visitLogicalExpression;
21
+ private visitIdentifier;
22
+ private markAsMoved;
23
+ private enterScope;
24
+ private leaveScope;
25
+ private findSymbolScope;
26
+ private declare;
27
+ private lookup;
28
+ }
29
+ export type AnalyzeResult = {
30
+ rootScope: Scope;
31
+ errors: MeaoiuError[];
32
+ symbolMap: SymbolAnalyzer['symbolMap'];
33
+ nodeScopeMap: SymbolAnalyzer['nodeScopeMap'];
34
+ };
35
+ export declare function analyzeSymbols(ast: AST.Program, builtInNames: typeof MeaoiuBuiltInNames): AnalyzeResult;
36
+ export {};
37
+ //# sourceMappingURL=symbolAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/api/utils/symbolAnalyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EAAyB,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAItF,cAAM,cAAc;IACnB,SAAgB,MAAM,EAAE,WAAW,EAAE,CAAM;IAC3C,SAAgB,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAa;IACjE,SAAgB,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAa;IAC/D,OAAO,CAAC,YAAY,CAAQ;gBAEhB,SAAS,EAAE,KAAK;IAI5B,OAAO,CAAC,mBAAmB;IAqEpB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI;IAyE9C,OAAO,CAAC,wBAAwB;IAoChC,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,wBAAwB;IAmChC,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,uBAAuB;IAsC/B,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,MAAM;CA8Bd;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACvC,YAAY,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CAC7C,CAAC;AAEF,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,kBAAkB,GAAG,aAAa,CAiBvG"}
@@ -0,0 +1,440 @@
1
+ // src/api/utils/symbolAnalyzer.ts
2
+ import { errorFrom } from '../../core/error.js';
3
+ import { checkArithmeticOperation, checkComparisonOperation } from '../../core/typedef.js';
4
+ const semanticErrorFrom = (ele, message) => errorFrom(ele, message, 4 /* Phase.SEMANTIC */);
5
+ class SymbolAnalyzer {
6
+ errors = [];
7
+ symbolMap = new Map();
8
+ nodeScopeMap = new Map();
9
+ currentScope;
10
+ constructor(rootScope) {
11
+ this.currentScope = rootScope;
12
+ }
13
+ inferExpressionType(node) {
14
+ switch (node.kind) {
15
+ case 9 /* NodeKind.NumericLiteral */:
16
+ return 0 /* MeaoiuType.NUMBER */;
17
+ case 10 /* NodeKind.StringLiteral */:
18
+ return 1 /* MeaoiuType.STRING */;
19
+ case 11 /* NodeKind.BooleanLiteral */:
20
+ case 21 /* NodeKind.ComparisonExpression */:
21
+ case 20 /* NodeKind.LogicalExpression */:
22
+ return 2 /* MeaoiuType.BOOLEAN */;
23
+ case 12 /* NodeKind.NullLiteral */:
24
+ return 3 /* MeaoiuType.NULL */;
25
+ case 13 /* NodeKind.Identifier */:
26
+ return this.lookup(node.symbol)?.type ?? 6 /* MeaoiuType.UNKNOWN */;
27
+ case 14 /* NodeKind.BlockExpression */:
28
+ return node.isCollection ? 5 /* MeaoiuType.COLLECTION */ : 6 /* MeaoiuType.UNKNOWN */;
29
+ case 17 /* NodeKind.ArithmeticExpression */: {
30
+ const op = node.operator;
31
+ if (op !== '+')
32
+ return 0 /* MeaoiuType.NUMBER */;
33
+ let knownType = this.inferExpressionType(node.left);
34
+ if (knownType === 6 /* MeaoiuType.UNKNOWN */)
35
+ knownType = this.inferExpressionType(node.right);
36
+ return knownType === 0 /* MeaoiuType.NUMBER */ || knownType === 1 /* MeaoiuType.STRING */ || knownType === 5 /* MeaoiuType.COLLECTION */
37
+ ? knownType
38
+ : 6 /* MeaoiuType.UNKNOWN */;
39
+ }
40
+ case 19 /* NodeKind.SequenceExpression */: {
41
+ const { sections, operators } = node;
42
+ let accType = 6 /* MeaoiuType.UNKNOWN */;
43
+ let knownType = this.inferExpressionType(sections[0]);
44
+ scan: for (let i = 0; i < operators.length; i++) {
45
+ if (accType !== 6 /* MeaoiuType.UNKNOWN */)
46
+ continue;
47
+ const op = operators[i].value;
48
+ switch (op) {
49
+ case '+':
50
+ break;
51
+ case '==':
52
+ case '!=':
53
+ accType = 2 /* MeaoiuType.BOOLEAN */;
54
+ break scan;
55
+ default:
56
+ accType = 0 /* MeaoiuType.NUMBER */;
57
+ continue;
58
+ }
59
+ if (knownType === 6 /* MeaoiuType.UNKNOWN */)
60
+ knownType = this.inferExpressionType(sections[i + 1]);
61
+ if (knownType === 0 /* MeaoiuType.NUMBER */ ||
62
+ knownType === 1 /* MeaoiuType.STRING */ ||
63
+ knownType === 5 /* MeaoiuType.COLLECTION */) {
64
+ accType = knownType;
65
+ }
66
+ }
67
+ return accType;
68
+ }
69
+ case 23 /* NodeKind.UnaryExpression */:
70
+ // 高仿/抢走,类型与它操作的参数一致
71
+ return this.inferExpressionType(node.argument);
72
+ case 22 /* NodeKind.MemberAccessExpression */: // @ 访问符,目前无法静态知道它会返回什么
73
+ case 18 /* NodeKind.CallExpression */: // 函数调用,目前无法静态知道返回类型
74
+ default:
75
+ return 6 /* MeaoiuType.UNKNOWN */;
76
+ }
77
+ }
78
+ visit(node) {
79
+ if (!node)
80
+ return;
81
+ this.nodeScopeMap.set(node, this.currentScope);
82
+ switch (node.kind) {
83
+ case 1 /* NodeKind.Program */:
84
+ case 14 /* NodeKind.BlockExpression */: {
85
+ this.enterScope();
86
+ for (const n of node.body)
87
+ this.visit(n);
88
+ this.leaveScope();
89
+ break;
90
+ }
91
+ case 15 /* NodeKind.IfExpression */: {
92
+ this.visit(node.condition);
93
+ this.visit(node.consequent);
94
+ this.visit(node.alternate);
95
+ break;
96
+ }
97
+ case 16 /* NodeKind.LoopExpression */:
98
+ this.visit(node.body);
99
+ break;
100
+ case 23 /* NodeKind.UnaryExpression */:
101
+ case 5 /* NodeKind.ReturnStatement */:
102
+ case 6 /* NodeKind.AmbushStatement */:
103
+ this.visit(node.argument);
104
+ break;
105
+ case 4 /* NodeKind.FunctionDeclaration */:
106
+ this.visitFunctionDeclaration(node);
107
+ break;
108
+ case 2 /* NodeKind.VariableDeclaration */:
109
+ this.visitVariableDeclaration(node);
110
+ break;
111
+ case 3 /* NodeKind.AssignmentStatement */:
112
+ this.visitAssignmentStatement(node);
113
+ break;
114
+ case 8 /* NodeKind.ExpressionStatement */:
115
+ this.visit(node.expression);
116
+ break;
117
+ case 18 /* NodeKind.CallExpression */:
118
+ this.visit(node.args);
119
+ this.visit(node.callee);
120
+ break;
121
+ case 22 /* NodeKind.MemberAccessExpression */:
122
+ this.visit(node.object);
123
+ this.visit(node.property);
124
+ break;
125
+ case 17 /* NodeKind.ArithmeticExpression */:
126
+ this.visitArithmeticExpression(node);
127
+ break;
128
+ case 21 /* NodeKind.ComparisonExpression */:
129
+ this.visitComparisonExpression(node);
130
+ break;
131
+ case 19 /* NodeKind.SequenceExpression */:
132
+ this.visitSequenceExpression(node);
133
+ break;
134
+ case 13 /* NodeKind.Identifier */:
135
+ this.visitIdentifier(node);
136
+ break;
137
+ case 20 /* NodeKind.LogicalExpression */:
138
+ this.visitLogicalExpression(node);
139
+ break;
140
+ case 9 /* NodeKind.NumericLiteral */:
141
+ case 10 /* NodeKind.StringLiteral */:
142
+ case 11 /* NodeKind.BooleanLiteral */:
143
+ case 12 /* NodeKind.NullLiteral */:
144
+ case 7 /* NodeKind.BreakStatement */:
145
+ case 0 /* NodeKind.ErrorNode */:
146
+ break;
147
+ default: // 此处已推断为不可达
148
+ const _n = node;
149
+ console.warn(`[符号分析器] 发现不可描述的节点 `, _n);
150
+ }
151
+ }
152
+ visitFunctionDeclaration(node) {
153
+ this.declare(node.name.symbol, 12 /* SymbolKind.FUNCTION */, 0 /* SymbolTag.NORMAL */, 4 /* MeaoiuType.FUNCTION */, node.name);
154
+ this.enterScope();
155
+ for (const paramStmt of node.parameters.body) {
156
+ if (paramStmt.kind === 2 /* NodeKind.VariableDeclaration */) {
157
+ // 情况 1: [= a 就是 1 =] 或 [= 蹭 a =]
158
+ // 这种语句本身就包含了声明逻辑,直接 visit 即可
159
+ this.visitVariableDeclaration(paramStmt);
160
+ continue;
161
+ }
162
+ if (paramStmt.kind !== 8 /* NodeKind.ExpressionStatement */)
163
+ continue;
164
+ const expr = paramStmt.expression;
165
+ if (expr.kind === 13 /* NodeKind.Identifier */) {
166
+ // 情况 2: [= a =]
167
+ // 手动将 'a' 声明为 'parameter'
168
+ this.declare(expr.symbol, 20 /* SymbolKind.PARAMETER */, 0 /* SymbolTag.NORMAL */, 6 /* MeaoiuType.UNKNOWN */, expr);
169
+ this.visitIdentifier(expr); // 访问它,以便高亮和引用查找
170
+ }
171
+ else if (expr.kind === 23 /* NodeKind.UnaryExpression */ && expr.argument.kind === 13 /* NodeKind.Identifier */) {
172
+ // 情况 3: [= 高仿 a =] 或 [= 抢走 a =]
173
+ const idNode = expr.argument;
174
+ // 手动将 'a' 声明为 'parameter'
175
+ this.declare(idNode.symbol, 20 /* SymbolKind.PARAMETER */, 0 /* SymbolTag.NORMAL */, 6 /* MeaoiuType.UNKNOWN */, idNode);
176
+ this.visit(expr); // 访问整个 '高仿 a' 表达式
177
+ }
178
+ else {
179
+ // 情况 4: [= 1+2 =] 或 [= '字面量' =] 或 [= a@1 =]
180
+ // 没有名字,只访问表达式,不声明
181
+ this.visit(expr);
182
+ }
183
+ }
184
+ this.visit(node.body);
185
+ this.leaveScope();
186
+ }
187
+ visitVariableDeclaration(node) {
188
+ const { identifier, initialization: init } = node;
189
+ let inferredType = 3 /* MeaoiuType.NULL */;
190
+ let valueRef; // 存储引用的符号
191
+ let tag = 0 /* SymbolTag.NORMAL */;
192
+ init: if (init) {
193
+ this.visit(init.value);
194
+ inferredType = this.inferExpressionType(init.value);
195
+ if (init.value.kind !== 13 /* NodeKind.Identifier */)
196
+ break init;
197
+ const valueSymbol = this.symbolMap.get(init.value);
198
+ if (valueSymbol?.tag === 2 /* SymbolTag.DECAYED */)
199
+ tag = valueSymbol.tag; // 衰变传染
200
+ // 「就是」创建静态引用或「才是」标记为已移动
201
+ if (init.operator === 0 /* AssignmentOperator.REFERENCE */)
202
+ valueRef = valueSymbol;
203
+ else if (init.operator === 2 /* AssignmentOperator.MOVE */)
204
+ this.markAsMoved(init.value.symbol);
205
+ if (tag !== 0 /* SymbolTag.NORMAL */) {
206
+ this.errors.push(semanticErrorFrom(identifier, `这个 '${identifier.symbol}' 没有灵魂喵!`));
207
+ }
208
+ }
209
+ this.declare(identifier.symbol, 13 /* SymbolKind.VARIABLE */, tag, inferredType, identifier, valueRef);
210
+ }
211
+ visitAssignmentStatement(node) {
212
+ const { value, assignee, operator } = node;
213
+ this.visit(value);
214
+ const valueType = this.inferExpressionType(value);
215
+ assign: if (assignee.kind !== 13 /* NodeKind.Identifier */)
216
+ this.visit(assignee);
217
+ else {
218
+ this.visitIdentifier(assignee, false);
219
+ const originalSymbol = this.symbolMap.get(assignee); // 取得原始符号
220
+ if (!originalSymbol)
221
+ break assign;
222
+ const symbol = { ...originalSymbol }; // 复制为新符号
223
+ symbol.type = valueType;
224
+ const valueSymbol = this.symbolMap.get(value);
225
+ if (valueSymbol?.tag === 2 /* SymbolTag.DECAYED */)
226
+ symbol.tag = valueSymbol.tag; // 衰变传染
227
+ symbol.valueRef =
228
+ operator === 0 /* AssignmentOperator.REFERENCE */ &&
229
+ value.kind === 13 /* NodeKind.Identifier */ &&
230
+ symbol.tag !== 2 /* SymbolTag.DECAYED */
231
+ ? valueSymbol // '就是' (Reference) 为未衰变符号更新静态引用链
232
+ : undefined; // '才是' (Move) 和 '就像' (Copy) 会打断旧的引用链,符号衰变也会使引用失效
233
+ // 更新符号表
234
+ this.findSymbolScope(assignee.symbol).symbols.set(assignee.symbol, symbol);
235
+ this.symbolMap.set(assignee, symbol);
236
+ if (symbol.tag !== 0 /* SymbolTag.NORMAL */) {
237
+ this.errors.push(semanticErrorFrom(assignee, `被移过的 '${assignee.symbol}' 失效了喵!`));
238
+ }
239
+ }
240
+ if (operator === 2 /* AssignmentOperator.MOVE */ && value.kind === 13 /* NodeKind.Identifier */)
241
+ this.markAsMoved(value.symbol);
242
+ }
243
+ visitArithmeticExpression(node) {
244
+ const { operator: op, left, right } = node;
245
+ this.visit(left);
246
+ this.visit(right);
247
+ let leftType = this.inferExpressionType(left);
248
+ let rightType = this.inferExpressionType(right);
249
+ switch ((+(leftType === 6 /* MeaoiuType.UNKNOWN */) << 1) | +(rightType === 6 /* MeaoiuType.UNKNOWN */)) {
250
+ case 0b11: // 都不懂
251
+ return; // 跳过检查
252
+ case 0b10: // 左不懂
253
+ leftType = rightType;
254
+ break;
255
+ case 0b01: // 右不懂
256
+ rightType = leftType;
257
+ break;
258
+ case 0b00: // 全都懂
259
+ break;
260
+ }
261
+ const error = checkArithmeticOperation(op, leftType, rightType);
262
+ if (error)
263
+ this.errors.push(semanticErrorFrom(node, error));
264
+ }
265
+ visitComparisonExpression(node) {
266
+ const { expressions, operators } = node;
267
+ let currentLeftType = this.inferExpressionType(expressions[0]);
268
+ this.visit(expressions[0]); // 访问第一个
269
+ for (let i = 0; i < operators.length; i++) {
270
+ const currentRightExpr = expressions[i + 1];
271
+ let currentRightType = this.inferExpressionType(currentRightExpr); // 必须是 let
272
+ this.visit(currentRightExpr); // 访问右边
273
+ switch ((+(currentLeftType === 6 /* MeaoiuType.UNKNOWN */) << 1) | +(currentRightType === 6 /* MeaoiuType.UNKNOWN */)) {
274
+ case 0b11: // 都不懂
275
+ continue; // 跳过检查
276
+ case 0b10: // 左不懂
277
+ currentLeftType = currentRightType;
278
+ break;
279
+ case 0b01: // 右不懂
280
+ currentRightType = currentLeftType;
281
+ break;
282
+ case 0b00: // 全都懂
283
+ break;
284
+ }
285
+ const opToken = operators[i];
286
+ const error = checkComparisonOperation(opToken.value, currentLeftType, currentRightType);
287
+ if (error)
288
+ this.errors.push(semanticErrorFrom(opToken, error));
289
+ currentLeftType = currentRightType;
290
+ }
291
+ }
292
+ visitSequenceExpression(node) {
293
+ const { sections, operators } = node;
294
+ let accType = this.inferExpressionType(sections[0]);
295
+ this.visit(sections[0]); // 访问第一节
296
+ for (let i = 0; i < operators.length; i++) {
297
+ const opToken = operators[i], op = opToken.value;
298
+ if (op === '==' || op === '!=')
299
+ return this.visitComparisonSequence(node, i + 1); // 让专用检查函数接力,本函数已结束使命
300
+ const nextExpr = sections[i + 1];
301
+ let nextType = this.inferExpressionType(nextExpr);
302
+ this.visit(nextExpr); // 访问下一节
303
+ switch ((+(accType === 6 /* MeaoiuType.UNKNOWN */) << 1) | +(nextType === 6 /* MeaoiuType.UNKNOWN */)) {
304
+ case 0b11: // 都不懂
305
+ if (op !== '+')
306
+ accType = 0 /* MeaoiuType.NUMBER */; // 非加号,锁定类型
307
+ continue; // 跳过检查
308
+ case 0b10: // 前不懂
309
+ accType = nextType;
310
+ break;
311
+ case 0b01: // 后不懂
312
+ nextType = accType;
313
+ break;
314
+ case 0b00: // 全都懂
315
+ break;
316
+ }
317
+ const error = checkArithmeticOperation(op, accType, nextType);
318
+ if (error) {
319
+ this.errors.push(semanticErrorFrom(opToken, error));
320
+ break; // 跳出坏链
321
+ }
322
+ accType = nextType;
323
+ }
324
+ }
325
+ visitComparisonSequence(node, startIndex) {
326
+ const { sections, operators } = node;
327
+ this.visit(sections[startIndex]); // 访问第一个比较操作的右侧
328
+ // 遍历链上剩下的所有操作符
329
+ for (let i = startIndex; i < operators.length; i++) {
330
+ const opToken = operators[i], op = opToken.value;
331
+ // 检查是否混入了非比较运算符
332
+ if (op !== '==' && op !== '!=') {
333
+ this.errors.push(semanticErrorFrom(opToken, `比较节不能混入 '${op}' 算术符喵!`));
334
+ break; // 发现错误,中止检查
335
+ }
336
+ // 访问下一个元素
337
+ this.visit(sections[i + 1]);
338
+ }
339
+ }
340
+ visitLogicalExpression(node) {
341
+ this.visit(node.left);
342
+ this.visit(node.right);
343
+ }
344
+ visitIdentifier(node, checkTag = true) {
345
+ const symbol = this.lookup(node.symbol); // 默认 resolveChain = true
346
+ if (!symbol) {
347
+ this.errors.push(semanticErrorFrom(node, `找不到名字为 '${node.symbol}' 的玩具喵!`));
348
+ return;
349
+ }
350
+ if (checkTag && symbol.tag !== 0 /* SymbolTag.NORMAL */) {
351
+ this.errors.push(semanticErrorFrom(node, `藏在 '${node.symbol}' 里的东西被移走了喵!`));
352
+ }
353
+ symbol.references.push(node);
354
+ this.symbolMap.set(node, symbol);
355
+ }
356
+ markAsMoved(name) {
357
+ // 查找原始符号
358
+ const symbolToMove = this.lookup(name, false);
359
+ if (!symbolToMove)
360
+ return;
361
+ // 追踪引用链到末端
362
+ let finalSymbol = symbolToMove;
363
+ while (finalSymbol.valueRef)
364
+ finalSymbol = finalSymbol.valueRef;
365
+ finalSymbol.tag = 1 /* SymbolTag.MOVED */;
366
+ }
367
+ enterScope() {
368
+ const newScope = { parent: this.currentScope, children: [], symbols: new Map() };
369
+ this.currentScope.children.push(newScope);
370
+ this.currentScope = newScope;
371
+ }
372
+ leaveScope() {
373
+ this.currentScope = this.currentScope.parent;
374
+ }
375
+ findSymbolScope(name) {
376
+ for (let scope = this.currentScope; scope; scope = scope.parent) {
377
+ if (scope.symbols.has(name))
378
+ return scope;
379
+ }
380
+ return undefined;
381
+ }
382
+ declare(name, kind, tag, type, declarationNode, valueRef) {
383
+ if (this.currentScope.symbols.has(name)) {
384
+ this.errors.push(semanticErrorFrom(declarationNode, `名字 '${name}' 已经被定义过了喵!`));
385
+ return;
386
+ }
387
+ const symbolInfo = { name, kind, tag, type, declarations: [declarationNode], references: [], valueRef };
388
+ this.currentScope.symbols.set(name, symbolInfo);
389
+ this.symbolMap.set(declarationNode, symbolInfo);
390
+ }
391
+ lookup(name, resolveChain = true) {
392
+ // 1. 在作用域中找到该名字的“第一环”
393
+ const scope = this.findSymbolScope(name);
394
+ if (!scope)
395
+ return undefined;
396
+ let foundSymbol = scope.symbols.get(name);
397
+ // 2. 如果不需要追踪链(比如在声明时),直接返回
398
+ if (!resolveChain)
399
+ return foundSymbol;
400
+ // 3. 追踪引用链,检查整条链上的“已移动”状态
401
+ for (let current = foundSymbol; current; current = current.valueRef) {
402
+ if (current.tag === 0 /* SymbolTag.NORMAL */)
403
+ continue;
404
+ // 创建一个已衰变的符号对象
405
+ foundSymbol = {
406
+ ...foundSymbol,
407
+ tag: 2 /* SymbolTag.DECAYED */,
408
+ type: 6 /* MeaoiuType.UNKNOWN */,
409
+ };
410
+ // 虚假的引用,仅用于提示
411
+ foundSymbol.valueRef = {
412
+ ...foundSymbol,
413
+ name: current.name, // 保持原始名称
414
+ valueRef: undefined,
415
+ };
416
+ this.currentScope.symbols.set(name, foundSymbol);
417
+ break;
418
+ }
419
+ return foundSymbol;
420
+ }
421
+ }
422
+ export function analyzeSymbols(ast, builtInNames) {
423
+ const rootScope = { children: [], symbols: new Map() };
424
+ for (const name of builtInNames) {
425
+ rootScope.symbols.set(name, {
426
+ name,
427
+ kind: 12 /* SymbolKind.FUNCTION */,
428
+ tag: 0 /* SymbolTag.NORMAL */,
429
+ type: 4 /* MeaoiuType.FUNCTION */,
430
+ declarations: [],
431
+ references: [],
432
+ isBuiltIn: true,
433
+ });
434
+ }
435
+ const analyzer = new SymbolAnalyzer(rootScope);
436
+ analyzer.visit(ast);
437
+ const { errors, symbolMap, nodeScopeMap } = analyzer;
438
+ return { rootScope, errors, symbolMap, nodeScopeMap };
439
+ }
440
+ //# sourceMappingURL=symbolAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolAnalyzer.js","sourceRoot":"","sources":["../../../src/api/utils/symbolAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type * as AST from '../../core/ast.js';
2
+ import type { MeaoiuType } from '../../core/typedef.js';
3
+ export declare const enum SymbolKind {
4
+ FUNCTION = 12,
5
+ VARIABLE = 13,
6
+ PARAMETER = 20
7
+ }
8
+ export declare const enum SymbolTag {
9
+ NORMAL = 0,
10
+ MOVED = 1,
11
+ DECAYED = 2
12
+ }
13
+ export type SymbolInfo = {
14
+ name: string;
15
+ kind: SymbolKind;
16
+ tag: SymbolTag;
17
+ type: MeaoiuType;
18
+ valueRef?: SymbolInfo | undefined;
19
+ declarations: AST.Identifier[];
20
+ references: AST.Identifier[];
21
+ isBuiltIn?: boolean;
22
+ };
23
+ export type Scope = {
24
+ parent?: Scope;
25
+ children: Scope[];
26
+ symbols: Map<string, SymbolInfo>;
27
+ };
28
+ //# sourceMappingURL=symbolTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolTable.d.ts","sourceRoot":"","sources":["../../../src/api/utils/symbolTable.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,0BAAkB,UAAU;IAC3B,QAAQ,KAAK;IACb,QAAQ,KAAK;IACb,SAAS,KAAK;CACd;AAED,0BAAkB,SAAS;IAC1B,MAAM,IAAI;IACV,KAAK,IAAI;IACT,OAAO,IAAI;CACX;AAGD,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC/B,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,MAAM,MAAM,KAAK,GAAG;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // src/api/utils/symbolTable.ts
2
+ export {};
3
+ //# sourceMappingURL=symbolTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolTable.js","sourceRoot":"","sources":["../../../src/api/utils/symbolTable.ts"],"names":[],"mappings":"AAAA,+BAA+B"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}