meaoiu 0.1.0 → 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.
Files changed (69) hide show
  1. package/dist/api/execution.d.ts +1 -1
  2. package/dist/api/execution.d.ts.map +1 -1
  3. package/dist/api/execution.js +3 -3
  4. package/dist/api/execution.js.map +1 -1
  5. package/dist/api/serviceState.d.ts.map +1 -1
  6. package/dist/api/serviceState.js +4 -7
  7. package/dist/api/serviceState.js.map +1 -1
  8. package/dist/api/services/completions.js +1 -1
  9. package/dist/api/services/completions.js.map +1 -1
  10. package/dist/api/services/formatting.d.ts.map +1 -1
  11. package/dist/api/services/formatting.js +27 -38
  12. package/dist/api/services/formatting.js.map +1 -1
  13. package/dist/api/services/inlayHints.d.ts +2 -2
  14. package/dist/api/services/inlayHints.d.ts.map +1 -1
  15. package/dist/api/services/inlayHints.js +2 -2
  16. package/dist/api/utils/astUtils.js +6 -6
  17. package/dist/api/utils/symbolAnalyzer.d.ts +1 -2
  18. package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -1
  19. package/dist/api/utils/symbolAnalyzer.js +62 -47
  20. package/dist/api/utils/symbolAnalyzer.js.map +1 -1
  21. package/dist/api/utils/symbolTable.d.ts +3 -3
  22. package/dist/api/utils/symbolTable.d.ts.map +1 -1
  23. package/dist/cli/main.js +1 -1
  24. package/dist/cli/tools/completer.js +8 -4
  25. package/dist/cli/tools/completer.js.map +1 -1
  26. package/dist/cli/tools/diagnoser.js +2 -1
  27. package/dist/cli/tools/diagnoser.js.map +1 -1
  28. package/dist/cli/tools/starter.js +2 -1
  29. package/dist/cli/tools/starter.js.map +1 -1
  30. package/dist/core/ast.d.ts +14 -22
  31. package/dist/core/ast.d.ts.map +1 -1
  32. package/dist/core/builtIns.d.ts +4 -3
  33. package/dist/core/builtIns.d.ts.map +1 -1
  34. package/dist/core/builtIns.js +4 -6
  35. package/dist/core/builtIns.js.map +1 -1
  36. package/dist/core/error.d.ts +5 -12
  37. package/dist/core/error.d.ts.map +1 -1
  38. package/dist/core/error.js +9 -20
  39. package/dist/core/error.js.map +1 -1
  40. package/dist/core/lexer/preprocessor.d.ts.map +1 -0
  41. package/dist/core/{preprocessor.js → lexer/preprocessor.js} +1 -1
  42. package/dist/core/lexer/preprocessor.js.map +1 -0
  43. package/dist/core/lexer/tokenizer.d.ts +115 -0
  44. package/dist/core/lexer/tokenizer.d.ts.map +1 -0
  45. package/dist/core/lexer/tokenizer.js +295 -0
  46. package/dist/core/lexer/tokenizer.js.map +1 -0
  47. package/dist/core/parser.d.ts +2 -78
  48. package/dist/core/parser.d.ts.map +1 -1
  49. package/dist/core/parser.js +116 -104
  50. package/dist/core/parser.js.map +1 -1
  51. package/dist/core/run/environment.d.ts +3 -2
  52. package/dist/core/run/environment.d.ts.map +1 -1
  53. package/dist/core/run/environment.js +6 -7
  54. package/dist/core/run/environment.js.map +1 -1
  55. package/dist/core/run/interpreter.d.ts.map +1 -1
  56. package/dist/core/run/interpreter.js +60 -54
  57. package/dist/core/run/interpreter.js.map +1 -1
  58. package/dist/core/typedef.d.ts +19 -9
  59. package/dist/core/typedef.d.ts.map +1 -1
  60. package/dist/core/typedef.js +26 -20
  61. package/dist/core/typedef.js.map +1 -1
  62. package/package.json +3 -3
  63. package/dist/core/preprocessor.d.ts.map +0 -1
  64. package/dist/core/preprocessor.js.map +0 -1
  65. package/dist/core/tokenizer.d.ts +0 -82
  66. package/dist/core/tokenizer.d.ts.map +0 -1
  67. package/dist/core/tokenizer.js +0 -277
  68. package/dist/core/tokenizer.js.map +0 -1
  69. /package/dist/core/{preprocessor.d.ts → lexer/preprocessor.d.ts} +0 -0
@@ -1,4 +1,5 @@
1
1
  import { Environment } from './run/environment.js';
2
+ import { type ArithmeticTokenKind, type ComparisonTokenKind, type Token } from './lexer/tokenizer.js';
2
3
  export type MeaoiuValue = number | string | boolean | null | Environment;
3
4
  export declare const enum MeaoiuType {
4
5
  NUMBER = 0,// 摸数
@@ -9,24 +10,33 @@ export declare const enum MeaoiuType {
9
10
  COLLECTION = 5,// 纸箱
10
11
  UNKNOWN = 6
11
12
  }
13
+ export declare const enum TypeName {
14
+ NUMBER = "\u6478\u6570",
15
+ STRING = "\u95F2\u8BDD",
16
+ BOOLEAN = "\u597D\u574F",
17
+ NULL = "\u7A7A\u7897",
18
+ FUNCTION = "\u8BA1\u8C0B",
19
+ COLLECTION = "\u7EB8\u7BB1",
20
+ UNKNOWN = "\u4E0D\u61C2"
21
+ }
12
22
  export declare const typeNames: {
13
- readonly 0: "摸数";
14
- readonly 1: "闲话";
15
- readonly 2: "好坏";
16
- readonly 3: "空碗";
17
- readonly 4: "计谋";
18
- readonly 5: "纸箱";
19
- readonly 6: "不懂";
23
+ readonly 0: TypeName.NUMBER;
24
+ readonly 1: TypeName.STRING;
25
+ readonly 2: TypeName.BOOLEAN;
26
+ readonly 3: TypeName.NULL;
27
+ readonly 4: TypeName.FUNCTION;
28
+ readonly 5: TypeName.COLLECTION;
29
+ readonly 6: TypeName.UNKNOWN;
20
30
  };
21
31
  export declare function getMeaoiuType(v: unknown): MeaoiuType;
22
32
  /**
23
33
  * 检查算术运算的类型是否合法
24
34
  * @returns 错误信息,如果合法则返回 undefined
25
35
  */
26
- export declare function checkArithmeticOperation(op: string, leftType: MeaoiuType, rightType: MeaoiuType): string | undefined;
36
+ export declare function checkArithmeticOperation(op: Token<ArithmeticTokenKind>, leftType: MeaoiuType, rightType: MeaoiuType): string | undefined;
27
37
  /**
28
38
  * 检查比较运算的类型是否合法
29
39
  * @returns 错误信息,如果合法则返回 undefined
30
40
  */
31
- export declare function checkComparisonOperation(op: string, leftType: MeaoiuType, rightType: MeaoiuType): string | undefined;
41
+ export declare function checkComparisonOperation(op: Token<ComparisonTokenKind>, leftType: MeaoiuType, rightType: MeaoiuType): string | undefined;
32
42
  //# sourceMappingURL=typedef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typedef.d.ts","sourceRoot":"","sources":["../../src/core/typedef.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC;AAEzE,0BAAkB,UAAU;IAC3B,MAAM,IAAA,CAAE,KAAK;IACb,MAAM,IAAA,CAAE,KAAK;IACb,OAAO,IAAA,CAAE,KAAK;IACd,IAAI,IAAA,CAAE,KAAK;IACX,QAAQ,IAAA,CAAE,KAAK;IACf,UAAU,IAAA,CAAE,KAAK;IACjB,OAAO,IAAA;CACP;AAED,eAAO,MAAM,SAAS;;;;;;;;CAQyB,CAAC;AAahD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAMpD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAkBpH;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAepH"}
1
+ {"version":3,"file":"typedef.d.ts","sourceRoot":"","sources":["../../src/core/typedef.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEjH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC;AAEzE,0BAAkB,UAAU;IAC3B,MAAM,IAAA,CAAE,KAAK;IACb,MAAM,IAAA,CAAE,KAAK;IACb,OAAO,IAAA,CAAE,KAAK;IACd,IAAI,IAAA,CAAE,KAAK;IACX,QAAQ,IAAA,CAAE,KAAK;IACf,UAAU,IAAA,CAAE,KAAK;IACjB,OAAO,IAAA;CACP;AAED,0BAAkB,QAAQ;IACzB,MAAM,iBAAO;IACb,MAAM,iBAAO;IACb,OAAO,iBAAO;IACd,IAAI,iBAAO;IACX,QAAQ,iBAAO;IACf,UAAU,iBAAO;IACjB,OAAO,iBAAO;CACd;AAED,eAAO,MAAM,SAAS;;;;;;;;CAQ2B,CAAC;AAalD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAKpD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,EAAE,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAC9B,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,UAAU,GACnB,MAAM,GAAG,SAAS,CAmBpB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,EAAE,EAAE,KAAK,CAAC,mBAAmB,CAAC,EAC9B,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,UAAU,GACnB,MAAM,GAAG,SAAS,CAgBpB"}
@@ -1,13 +1,13 @@
1
1
  // src/core/typedef.ts
2
2
  import { Environment } from './run/environment.js';
3
3
  export const typeNames = {
4
- [0 /* MeaoiuType.NUMBER */]: '摸数',
5
- [1 /* MeaoiuType.STRING */]: '闲话',
6
- [2 /* MeaoiuType.BOOLEAN */]: '好坏',
7
- [3 /* MeaoiuType.NULL */]: '空碗',
8
- [4 /* MeaoiuType.FUNCTION */]: '计谋',
9
- [5 /* MeaoiuType.COLLECTION */]: '纸箱',
10
- [6 /* MeaoiuType.UNKNOWN */]: '不懂',
4
+ [0 /* MeaoiuType.NUMBER */]: "\u6478\u6570" /* TypeName.NUMBER */,
5
+ [1 /* MeaoiuType.STRING */]: "\u95F2\u8BDD" /* TypeName.STRING */,
6
+ [2 /* MeaoiuType.BOOLEAN */]: "\u597D\u574F" /* TypeName.BOOLEAN */,
7
+ [3 /* MeaoiuType.NULL */]: "\u7A7A\u7897" /* TypeName.NULL */,
8
+ [4 /* MeaoiuType.FUNCTION */]: "\u8BA1\u8C0B" /* TypeName.FUNCTION */,
9
+ [5 /* MeaoiuType.COLLECTION */]: "\u7EB8\u7BB1" /* TypeName.COLLECTION */,
10
+ [6 /* MeaoiuType.UNKNOWN */]: "\u4E0D\u61C2" /* TypeName.UNKNOWN */,
11
11
  };
12
12
  const typeMap = {
13
13
  number: 0 /* MeaoiuType.NUMBER */,
@@ -19,14 +19,13 @@ const typeMap = {
19
19
  unknown: 6 /* MeaoiuType.UNKNOWN */,
20
20
  };
21
21
  export function getMeaoiuType(v) {
22
- if (v === null || v === undefined)
22
+ if (v == null)
23
23
  return 3 /* MeaoiuType.NULL */;
24
24
  if (v instanceof Environment)
25
25
  return 5 /* MeaoiuType.COLLECTION */;
26
26
  if (v !== v)
27
27
  return 6 /* MeaoiuType.UNKNOWN */;
28
- const t = typeof v;
29
- return typeMap[t] ?? 6 /* MeaoiuType.UNKNOWN */;
28
+ return typeMap[typeof v] ?? 6 /* MeaoiuType.UNKNOWN */;
30
29
  }
31
30
  /**
32
31
  * 检查算术运算的类型是否合法
@@ -34,17 +33,23 @@ export function getMeaoiuType(v) {
34
33
  */
35
34
  export function checkArithmeticOperation(op, leftType, rightType) {
36
35
  if (leftType !== rightType) {
37
- return `「${op}」操作符只能给同类用喵!「${typeNames[leftType]}」和「${typeNames[rightType]}」不可以喵!`;
36
+ return `「${op.value}」操作符只能给同类用喵!「${typeNames[leftType]}」和「${typeNames[rightType]}」不可以喵!`;
38
37
  }
39
38
  if (leftType === 0 /* MeaoiuType.NUMBER */)
40
39
  return undefined; // 数字可以做任何运算
41
- if (['-', '*', '/'].includes(op)) {
42
- return `「${op}」操作符只能用于两个「${typeNames[0 /* MeaoiuType.NUMBER */]}」之间喵!`;
40
+ switch (op.kind) {
41
+ case 26 /* TokenKind.ARITHMETIC_PLUS */:
42
+ if (leftType === 1 /* MeaoiuType.STRING */ || leftType === 5 /* MeaoiuType.COLLECTION */)
43
+ return undefined;
44
+ return `「${op.value}」操作符只能用在「${"\u6478\u6570" /* TypeName.NUMBER */}」、「${"\u95F2\u8BDD" /* TypeName.STRING */}」或「${"\u7EB8\u7BB1" /* TypeName.COLLECTION */}」上喵!`;
45
+ case 27 /* TokenKind.ARITHMETIC_MINUS */:
46
+ case 28 /* TokenKind.ARITHMETIC_MULTIPLY */:
47
+ case 29 /* TokenKind.ARITHMETIC_DIVIDE */:
48
+ return `「${op.value}」操作符只能用于两个「${"\u6478\u6570" /* TypeName.NUMBER */}」之间喵!`;
49
+ default:
50
+ const _o = op;
51
+ return `「${_o}」怎么会是操作符喵?`;
43
52
  }
44
- if (op === '+' && leftType !== 1 /* MeaoiuType.STRING */ && leftType !== 5 /* MeaoiuType.COLLECTION */) {
45
- return `「${op}」操作符只能用在「${typeNames[0 /* MeaoiuType.NUMBER */]}」、「${typeNames[1 /* MeaoiuType.STRING */]}」或「${typeNames[5 /* MeaoiuType.COLLECTION */]}」上喵!`;
46
- }
47
- return undefined; // 合法
48
53
  }
49
54
  /**
50
55
  * 检查比较运算的类型是否合法
@@ -52,15 +57,16 @@ export function checkArithmeticOperation(op, leftType, rightType) {
52
57
  */
53
58
  export function checkComparisonOperation(op, leftType, rightType) {
54
59
  // '==' 和 '!=' 允许不同类型
55
- if (op === '==' || op === '!=')
60
+ const opKind = op.kind;
61
+ if (opKind === 30 /* TokenKind.COMPARISON_EQUAL */ || opKind === 31 /* TokenKind.COMPARISON_NOT_EQUAL */)
56
62
  return undefined; // 合法
57
63
  // 其他比较符必须同类
58
64
  if (leftType !== rightType) {
59
- return `「${op}」操作符只能给同类用喵!「${typeNames[leftType]}」和「${typeNames[rightType]}」不可以喵!`;
65
+ return `「${op.value}」操作符只能给同类用喵!「${typeNames[leftType]}」和「${typeNames[rightType]}」不可以喵!`;
60
66
  }
61
67
  // 且只能是数字或字符串
62
68
  if (leftType !== 0 /* MeaoiuType.NUMBER */ && leftType !== 1 /* MeaoiuType.STRING */) {
63
- return `「${op}」操作符只能用在「${typeNames[0 /* MeaoiuType.NUMBER */]}」或「${typeNames[1 /* MeaoiuType.STRING */]}」上喵!`;
69
+ return `「${op.value}」操作符只能用在「${"\u6478\u6570" /* TypeName.NUMBER */}」或「${"\u95F2\u8BDD" /* TypeName.STRING */}」上喵!`;
64
70
  }
65
71
  return undefined; // 合法
66
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"typedef.js","sourceRoot":"","sources":["../../src/core/typedef.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAcnD,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,2BAAmB,EAAE,IAAI;IACzB,2BAAmB,EAAE,IAAI;IACzB,4BAAoB,EAAE,IAAI;IAC1B,yBAAiB,EAAE,IAAI;IACvB,6BAAqB,EAAE,IAAI;IAC3B,+BAAuB,EAAE,IAAI;IAC7B,4BAAoB,EAAE,IAAI;CACoB,CAAC;AAGhD,MAAM,OAAO,GAAG;IACf,MAAM,2BAAmB;IACzB,MAAM,2BAAmB;IACzB,OAAO,4BAAoB;IAC3B,IAAI,yBAAiB;IACrB,QAAQ,6BAAqB;IAC7B,UAAU,+BAAuB;IACjC,OAAO,4BAAoB;CACuB,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,CAAU;IACvC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,+BAAuB;IAC1D,IAAI,CAAC,YAAY,WAAW;QAAE,qCAA6B;IAC3D,IAAI,CAAC,KAAK,CAAC;QAAE,kCAA0B;IACvC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;IACnB,OAAO,OAAO,CAAC,CAAe,CAAC,8BAAsB,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAU,EAAE,QAAoB,EAAE,SAAqB;IAC/F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,EAAE,gBAAgB,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;IACpF,CAAC;IAED,IAAI,QAAQ,8BAAsB;QAAE,OAAO,SAAS,CAAC,CAAC,YAAY;IAElE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,EAAE,cAAc,SAAS,2BAAmB,OAAO,CAAC;IAChE,CAAC;IAED,IAAI,EAAE,KAAK,GAAG,IAAI,QAAQ,8BAAsB,IAAI,QAAQ,kCAA0B,EAAE,CAAC;QACxF,OAAO,IAAI,EAAE,YAAY,SAAS,2BAAmB,MAAM,SAAS,2BAAmB,MACtF,SAAS,+BACV,MAAM,CAAC;IACR,CAAC;IAED,OAAO,SAAS,CAAC,CAAC,KAAK;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,EAAU,EAAE,QAAoB,EAAE,SAAqB;IAC/F,qBAAqB;IACrB,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC,CAAC,KAAK;IAEvD,YAAY;IACZ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,EAAE,gBAAgB,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;IACpF,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,8BAAsB,IAAI,QAAQ,8BAAsB,EAAE,CAAC;QACtE,OAAO,IAAI,EAAE,YAAY,SAAS,2BAAmB,MAAM,SAAS,2BAAmB,MAAM,CAAC;IAC/F,CAAC;IAED,OAAO,SAAS,CAAC,CAAC,KAAK;AACxB,CAAC"}
1
+ {"version":3,"file":"typedef.js","sourceRoot":"","sources":["../../src/core/typedef.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAyBnD,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,2BAAmB,sCAAiB;IACpC,2BAAmB,sCAAiB;IACpC,4BAAoB,uCAAkB;IACtC,yBAAiB,oCAAe;IAChC,6BAAqB,wCAAmB;IACxC,+BAAuB,0CAAqB;IAC5C,4BAAoB,uCAAkB;CACU,CAAC;AAGlD,MAAM,OAAO,GAAG;IACf,MAAM,2BAAmB;IACzB,MAAM,2BAAmB;IACzB,OAAO,4BAAoB;IAC3B,IAAI,yBAAiB;IACrB,QAAQ,6BAAqB;IAC7B,UAAU,+BAAuB;IACjC,OAAO,4BAAoB;CACuB,CAAC;AAEpD,MAAM,UAAU,aAAa,CAAC,CAAU;IACvC,IAAI,CAAC,IAAI,IAAI;QAAE,+BAAuB;IACtC,IAAI,CAAC,YAAY,WAAW;QAAE,qCAA6B;IAC3D,IAAI,CAAC,KAAK,CAAC;QAAE,kCAA0B;IACvC,OAAO,OAAO,CAAC,OAAO,CAAe,CAAC,8BAAsB,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACvC,EAA8B,EAC9B,QAAoB,EACpB,SAAqB;IAErB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,EAAE,CAAC,KAAK,gBAAgB,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC1F,CAAC;IAED,IAAI,QAAQ,8BAAsB;QAAE,OAAO,SAAS,CAAC,CAAC,YAAY;IAElE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACjB;YACC,IAAI,QAAQ,8BAAsB,IAAI,QAAQ,kCAA0B;gBAAE,OAAO,SAAS,CAAC;YAC3F,OAAO,IAAI,EAAE,CAAC,KAAK,YAAY,oCAAe,MAAM,oCAAe,MAAM,wCAAmB,MAAM,CAAC;QACpG,yCAAgC;QAChC,4CAAmC;QACnC;YACC,OAAO,IAAI,EAAE,CAAC,KAAK,cAAc,oCAAe,OAAO,CAAC;QACzD;YACC,MAAM,EAAE,GAAU,EAAE,CAAC;YACrB,OAAO,IAAI,EAAE,YAAY,CAAC;IAC5B,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACvC,EAA8B,EAC9B,QAAoB,EACpB,SAAqB;IAErB,qBAAqB;IACrB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;IACvB,IAAI,MAAM,wCAA+B,IAAI,MAAM,4CAAmC;QAAE,OAAO,SAAS,CAAC,CAAC,KAAK;IAE/G,YAAY;IACZ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,EAAE,CAAC,KAAK,gBAAgB,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;IAC1F,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,8BAAsB,IAAI,QAAQ,8BAAsB,EAAE,CAAC;QACtE,OAAO,IAAI,EAAE,CAAC,KAAK,YAAY,oCAAe,MAAM,oCAAe,MAAM,CAAC;IAC3E,CAAC;IAED,OAAO,SAAS,CAAC,CAAC,KAAK;AACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meaoiu",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "盒中有识算之聪慧喵,告世人云:喵谕者,古今地外皆曰好喵,乃奇民要术喵~",
5
5
  "keywords": [
6
6
  "meaoiu",
@@ -49,7 +49,7 @@
49
49
  "prepublishOnly": "npm run build"
50
50
  },
51
51
  "devDependencies": {
52
- "@types/node": "^25.9.1",
52
+ "@types/node": "^25.9.3",
53
53
  "rimraf": "^6.1.3",
54
54
  "typescript": "^6.0.3"
55
55
  },
@@ -57,4 +57,4 @@
57
57
  "cac": "^7.0.0",
58
58
  "string-width": "^8.2.1"
59
59
  }
60
- }
60
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"preprocessor.d.ts","sourceRoot":"","sources":["../../src/core/preprocessor.ts"],"names":[],"mappings":"AAoIA,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAoErD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"preprocessor.js","sourceRoot":"","sources":["../../src/core/preprocessor.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- export declare const enum TokenKind {
2
- ERROR = 0,//不认识的字符喵
3
- KEYWORD_USE = 1,
4
- KEYWORD_IS = 2,
5
- KEYWORD_LIKE = 3,
6
- KEYWORD_ONLY = 4,
7
- KEYWORD_CLONE = 5,
8
- KEYWORD_MOVE = 6,
9
- KEYWORD_CONFIRM = 7,
10
- KEYWORD_ELSE = 8,
11
- KEYWORD_LOOP = 9,
12
- KEYWORD_BREAK = 10,
13
- KEYWORD_AMBUSH = 11,
14
- KEYWORD_DEF = 12,
15
- KEYWORD_CALL = 13,
16
- KEYWORD_RETURN = 14,
17
- NUMBER = 15,
18
- STRING = 16,
19
- BOOLEAN = 17,
20
- NULL = 18,
21
- IDENTIFIER = 19,
22
- COLLECTION_START = 20,// [=
23
- COLLECTION_END = 21,// =]
24
- BLOCK_START = 22,// [#
25
- BLOCK_END = 23,// #]
26
- TERMINATOR = 24,// ~
27
- ACCESSOR = 25,// @
28
- OPERATOR = 26,// +, -, *, /, ==, !=, >, <, >=, <=
29
- COMMA = 27,// ,
30
- LOGIC_AND = 28,// 和
31
- LOGIC_OR = 29,// 或
32
- LOGIC_CLOSE_AND = 30,// 都好
33
- LOGIC_CLOSE_OR = 31,// 不坏
34
- LOGIC_CLOSE_NOR = 32,// 都坏
35
- LOGIC_CLOSE_NAND = 33,// 不好
36
- COMMENT = 34,
37
- EOF = 35
38
- }
39
- export declare const KEYWORDS: {
40
- readonly 蹭: TokenKind.KEYWORD_USE;
41
- readonly 就是: TokenKind.KEYWORD_IS;
42
- readonly 就像: TokenKind.KEYWORD_LIKE;
43
- readonly 高仿: TokenKind.KEYWORD_CLONE;
44
- readonly 才是: TokenKind.KEYWORD_ONLY;
45
- readonly 抢走: TokenKind.KEYWORD_MOVE;
46
- readonly '\u597D\u4E0D\u597D?': TokenKind.KEYWORD_CONFIRM;
47
- readonly 不然: TokenKind.KEYWORD_ELSE;
48
- readonly 玩耍: TokenKind.KEYWORD_LOOP;
49
- readonly 累了: TokenKind.KEYWORD_BREAK;
50
- readonly 想要: TokenKind.KEYWORD_DEF;
51
- readonly 扒: TokenKind.KEYWORD_CALL;
52
- readonly 叼回来: TokenKind.KEYWORD_RETURN;
53
- readonly 偷袭: TokenKind.KEYWORD_AMBUSH;
54
- readonly 好喵: TokenKind.BOOLEAN;
55
- readonly 坏喵: TokenKind.BOOLEAN;
56
- readonly 空碗: TokenKind.NULL;
57
- readonly 和: TokenKind.LOGIC_AND;
58
- readonly 或: TokenKind.LOGIC_OR;
59
- readonly 都好: TokenKind.LOGIC_CLOSE_AND;
60
- readonly 不坏: TokenKind.LOGIC_CLOSE_OR;
61
- readonly 都坏: TokenKind.LOGIC_CLOSE_NOR;
62
- readonly 不好: TokenKind.LOGIC_CLOSE_NAND;
63
- };
64
- export type Keyword = keyof typeof KEYWORDS;
65
- export declare function isKeyword(symbol: string): symbol is Keyword;
66
- export declare const sortedKeywords: Keyword[];
67
- export declare const OP_ARITH: Set<string>;
68
- export declare const OP_COMP: Set<string>;
69
- export declare const OP_COMP_E: Set<string>;
70
- export type Token = {
71
- kind: TokenKind;
72
- value: string;
73
- line: number;
74
- col: number;
75
- };
76
- export type TokenizerOptions = {
77
- ignoreComments?: boolean;
78
- convertFullWidth?: boolean;
79
- useOnebased?: boolean;
80
- };
81
- export declare function tokenize(sourceCode: string, options?: TokenizerOptions): Token[];
82
- //# sourceMappingURL=tokenizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/core/tokenizer.ts"],"names":[],"mappings":"AAKA,0BAAkB,SAAS;IAC1B,KAAK,IAAA,CAAE,SAAS;IAGhB,WAAW,IAAA;IACX,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,aAAa,IAAA;IACb,YAAY,IAAA;IACZ,eAAe,IAAA;IACf,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,aAAa,KAAA;IACb,cAAc,KAAA;IACd,WAAW,KAAA;IACX,YAAY,KAAA;IACZ,cAAc,KAAA;IAGd,MAAM,KAAA;IACN,MAAM,KAAA;IACN,OAAO,KAAA;IACP,IAAI,KAAA;IAGJ,UAAU,KAAA;IAGV,gBAAgB,KAAA,CAAE,KAAK;IACvB,cAAc,KAAA,CAAE,KAAK;IACrB,WAAW,KAAA,CAAE,KAAK;IAClB,SAAS,KAAA,CAAE,KAAK;IAChB,UAAU,KAAA,CAAE,IAAI;IAChB,QAAQ,KAAA,CAAE,IAAI;IACd,QAAQ,KAAA,CAAE,mCAAmC;IAC7C,KAAK,KAAA,CAAE,IAAI;IAGX,SAAS,KAAA,CAAE,IAAI;IACf,QAAQ,KAAA,CAAE,IAAI;IACd,eAAe,KAAA,CAAE,KAAK;IACtB,cAAc,KAAA,CAAE,KAAK;IACrB,eAAe,KAAA,CAAE,KAAK;IACtB,gBAAgB,KAAA,CAAE,KAAK;IAGvB,OAAO,KAAA;IACP,GAAG,KAAA;CACH;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;CAwByB,CAAC;AAC/C,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,QAAQ,CAAC;AAC5C,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,OAAO,CAE3D;AAED,eAAO,MAAM,cAAc,EAAgE,OAAO,EAAE,CAAC;AAErG,eAAO,MAAM,QAAQ,aAAgC,CAAC;AACtD,eAAO,MAAM,OAAO,aAA8C,CAAC;AACnE,eAAO,MAAM,SAAS,aAAwB,CAAC;AAK/C,MAAM,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,KAAK,EAAE,CA+LhF"}
@@ -1,277 +0,0 @@
1
- // src/core/tokenizer.ts
2
- import { preprocess } from './preprocessor.js';
3
- import { MeaoiuBuiltInNames } from './builtIns.js';
4
- export const KEYWORDS = {
5
- 蹭: 1 /* TokenKind.KEYWORD_USE */,
6
- 就是: 2 /* TokenKind.KEYWORD_IS */,
7
- 就像: 3 /* TokenKind.KEYWORD_LIKE */,
8
- 高仿: 5 /* TokenKind.KEYWORD_CLONE */,
9
- 才是: 4 /* TokenKind.KEYWORD_ONLY */,
10
- 抢走: 6 /* TokenKind.KEYWORD_MOVE */,
11
- '好不好?': 7 /* TokenKind.KEYWORD_CONFIRM */,
12
- 不然: 8 /* TokenKind.KEYWORD_ELSE */,
13
- 玩耍: 9 /* TokenKind.KEYWORD_LOOP */,
14
- 累了: 10 /* TokenKind.KEYWORD_BREAK */,
15
- 想要: 12 /* TokenKind.KEYWORD_DEF */,
16
- 扒: 13 /* TokenKind.KEYWORD_CALL */,
17
- 叼回来: 14 /* TokenKind.KEYWORD_RETURN */,
18
- 偷袭: 11 /* TokenKind.KEYWORD_AMBUSH */,
19
- 好喵: 17 /* TokenKind.BOOLEAN */,
20
- 坏喵: 17 /* TokenKind.BOOLEAN */,
21
- 空碗: 18 /* TokenKind.NULL */,
22
- 和: 28 /* TokenKind.LOGIC_AND */,
23
- 或: 29 /* TokenKind.LOGIC_OR */,
24
- 都好: 30 /* TokenKind.LOGIC_CLOSE_AND */,
25
- 不坏: 31 /* TokenKind.LOGIC_CLOSE_OR */,
26
- 都坏: 32 /* TokenKind.LOGIC_CLOSE_NOR */,
27
- 不好: 33 /* TokenKind.LOGIC_CLOSE_NAND */,
28
- };
29
- export function isKeyword(symbol) {
30
- return symbol in KEYWORDS;
31
- }
32
- export const sortedKeywords = Object.keys(KEYWORDS).sort((a, b) => b.length - a.length);
33
- export const OP_ARITH = new Set(['+', '-', '*', '/']);
34
- export const OP_COMP = new Set(['==', '!=', '>', '<', '>=', '<=']);
35
- export const OP_COMP_E = new Set(['==', '!=']);
36
- const ID_START_REGEX = /[\p{ID_Start}_]/v;
37
- const ID_CONTINUE_REGEX = /[\p{ID_Continue}]/v;
38
- const isNumChar = (char) => char >= '0' && char <= '9';
39
- export function tokenize(sourceCode, options) {
40
- const { ignoreComments = true, convertFullWidth = true, useOnebased = true } = options ?? {};
41
- const OriginBase = +useOnebased;
42
- if (convertFullWidth)
43
- sourceCode = preprocess(sourceCode);
44
- const sourceCodeLen = sourceCode.length;
45
- // 小本本:记函数
46
- const functionNames = new Set(MeaoiuBuiltInNames);
47
- let expectingFuncNameAfterParamEnd = false;
48
- const tokens = [];
49
- let line = OriginBase, col = OriginBase, cursor = 0;
50
- const charAt = (cursor) => String.fromCodePoint(sourceCode.codePointAt(cursor));
51
- const advance = (steps = 1) => {
52
- const target = cursor + steps;
53
- const end = Math.min(target, sourceCodeLen);
54
- while (cursor < end)
55
- sourceCode[cursor++] === '\n' ? (line++, (col = OriginBase)) : col++;
56
- cursor = target;
57
- };
58
- while (cursor < sourceCodeLen) {
59
- const startLine = line;
60
- const startCol = col;
61
- const char = charAt(cursor);
62
- const charLen = char.length; // 步进长度记好了喵!
63
- // 略过空白
64
- if (/\s/.test(char)) {
65
- advance(charLen);
66
- continue;
67
- }
68
- // 注释
69
- if (char === '(') {
70
- const contentStart = cursor + charLen;
71
- let nestingLevel = 1, i = contentStart; // 局部游标,跳过起点的 '('
72
- while (nestingLevel > 0 && i < sourceCodeLen) {
73
- const innerChar = sourceCode[i++];
74
- if (innerChar === '(')
75
- nestingLevel++;
76
- else if (innerChar === ')')
77
- nestingLevel--;
78
- }
79
- advance(i - cursor);
80
- if (nestingLevel !== 0)
81
- console.error('警告喵: 文件结尾有未闭合的悄悄话!');
82
- else
83
- i--; // 退一步,把最后的 ')' 排除在截取范围外
84
- if (!ignoreComments) {
85
- const commentContent = sourceCode.slice(contentStart, i);
86
- tokens.push({ kind: 34 /* TokenKind.COMMENT */, value: commentContent, line: startLine, col: startCol });
87
- }
88
- continue;
89
- }
90
- // 关键字
91
- let matchedKeyword;
92
- for (const keyword of sortedKeywords) {
93
- if (sourceCode.startsWith(keyword, cursor)) {
94
- matchedKeyword = keyword;
95
- break;
96
- }
97
- }
98
- if (matchedKeyword) {
99
- const tokenKind = KEYWORDS[matchedKeyword];
100
- tokens.push({ kind: tokenKind, value: matchedKeyword, line: startLine, col: startCol });
101
- advance(matchedKeyword.length);
102
- if (tokenKind === 12 /* TokenKind.KEYWORD_DEF */)
103
- expectingFuncNameAfterParamEnd = true; // '想要'
104
- continue;
105
- }
106
- // 二字操作符
107
- if (charLen === 1 && cursor + 1 < sourceCodeLen) {
108
- const twoCharSymbol = char + sourceCode[cursor + 1];
109
- let kind = 0 /* TokenKind.ERROR */; // 默认无效值
110
- switch (twoCharSymbol) {
111
- case '==':
112
- case '!=':
113
- case '>=':
114
- case '<=':
115
- kind = 26 /* TokenKind.OPERATOR */;
116
- break;
117
- case '[=':
118
- kind = 20 /* TokenKind.COLLECTION_START */;
119
- break;
120
- case '=]':
121
- kind = 21 /* TokenKind.COLLECTION_END */;
122
- break;
123
- case '[#':
124
- kind = 22 /* TokenKind.BLOCK_START */;
125
- break;
126
- case '#]':
127
- kind = 23 /* TokenKind.BLOCK_END */;
128
- break;
129
- }
130
- if (kind !== 0 /* TokenKind.ERROR */) {
131
- tokens.push({ kind, value: twoCharSymbol, line: startLine, col: startCol });
132
- advance(2);
133
- if (kind !== 21 /* TokenKind.COLLECTION_END */)
134
- expectingFuncNameAfterParamEnd = false;
135
- continue;
136
- }
137
- }
138
- // 单字操作符
139
- if ('+-*/><@~,'.includes(char)) {
140
- let kind = 26 /* TokenKind.OPERATOR */;
141
- if (char === ',')
142
- kind = 27 /* TokenKind.COMMA */;
143
- else if (char === '@')
144
- kind = 25 /* TokenKind.ACCESSOR */;
145
- else if (char === '~')
146
- kind = 24 /* TokenKind.TERMINATOR */;
147
- tokens.push({ kind, value: char, line: startLine, col: startCol });
148
- advance(charLen);
149
- continue;
150
- }
151
- // 非负数字,十进制整数及小数
152
- if (isNumChar(char)) {
153
- let i = cursor;
154
- while (i < sourceCodeLen && isNumChar(sourceCode[i]))
155
- i++;
156
- if (i + 1 < sourceCodeLen && sourceCode[i] === '.' && isNumChar(sourceCode[i + 1])) {
157
- i++;
158
- while (i < sourceCodeLen && isNumChar(sourceCode[i]))
159
- i++;
160
- }
161
- const numStr = sourceCode.slice(cursor, i);
162
- advance(i - cursor);
163
- tokens.push({ kind: 15 /* TokenKind.NUMBER */, value: numStr, line: startLine, col: startCol });
164
- continue;
165
- }
166
- // 字符串
167
- if (char === '"' || char === "'") {
168
- const contentStart = cursor + charLen;
169
- let i = contentStart;
170
- while (i < sourceCodeLen && sourceCode[i] !== char)
171
- i++;
172
- const str = sourceCode.slice(contentStart, i);
173
- advance(i - cursor + charLen);
174
- tokens.push({ kind: 16 /* TokenKind.STRING */, value: str, line: startLine, col: startCol });
175
- continue;
176
- }
177
- // 标识符
178
- if (ID_START_REGEX.test(char) || char === '{') {
179
- let identifier = '', identifierStartCol = startCol, i = cursor;
180
- if (char === '{') {
181
- const contentStart = (i += charLen); // 跳过 '{' 并记录内容起点
182
- identifierStartCol += charLen; // 记录标识符真正的起始列
183
- while (i < sourceCodeLen && sourceCode[i] !== '}')
184
- i++;
185
- identifier = sourceCode.slice(contentStart, i++); // 截取标识并跳过闭合的 '}',未闭合会多越界一步但安全
186
- }
187
- else {
188
- parseIdentifier: while (i < sourceCodeLen) {
189
- const idChar = charAt(i);
190
- if (!ID_CONTINUE_REGEX.test(idChar))
191
- break;
192
- // 有粘连的关键字则打断
193
- for (const keyword of sortedKeywords)
194
- if (sourceCode.startsWith(keyword, i))
195
- break parseIdentifier;
196
- i += idChar.length;
197
- }
198
- identifier = sourceCode.slice(cursor, i);
199
- }
200
- advance(i - cursor);
201
- // 统一创建标识符词元
202
- if (identifier) {
203
- tokens.push({
204
- kind: 19 /* TokenKind.IDENTIFIER */,
205
- value: identifier,
206
- line: startLine,
207
- col: identifierStartCol,
208
- });
209
- if (expectingFuncNameAfterParamEnd) {
210
- // 抓到了!这个标识符就是函数名喵!
211
- functionNames.add(identifier);
212
- expectingFuncNameAfterParamEnd = false; // 重置状态
213
- }
214
- }
215
- continue;
216
- }
217
- // 不认识的字符喵
218
- tokens.push({ kind: 0 /* TokenKind.ERROR */, value: char, line: startLine, col: startCol });
219
- console.error('不认识的字符喵:', char);
220
- advance(charLen);
221
- }
222
- tokens.push({ kind: 35 /* TokenKind.EOF */, value: 'EndOfFile', line, col });
223
- return repairCallTokens(tokens, functionNames);
224
- }
225
- /**
226
- * 遍历原始 Token 列表,修复被错误合并的 `扒纸箱名函数名`。
227
- */
228
- function repairCallTokens(tokens, functionNames) {
229
- // 为了最高效的匹配,按长度降序排序
230
- // 这样能确保 `喵` 不会错误地匹配 `xxx高级喵` 的 `喵`
231
- const sortedFunctionNames = Array.from(functionNames).sort((a, b) => b.length - a.length);
232
- const repairedTokens = [];
233
- const lastIndex = tokens.length - 1;
234
- let i = 0;
235
- scanTokens: while (i < lastIndex) {
236
- const currentToken = tokens[i];
237
- const nextToken = tokens[i + 1];
238
- // 检查是否是需要修复的目标
239
- if (currentToken.kind !== 13 /* TokenKind.KEYWORD_CALL */ || // 不是 '扒'
240
- nextToken.kind !== 19 /* TokenKind.IDENTIFIER */ || // 后面无跟着的标识符
241
- tokens[i + 2]?.kind === 19 /* TokenKind.IDENTIFIER */ // 后面跟着第二个标识符
242
- ) {
243
- // 不是需要修复的目标,或者是一个安全的 `扒 纸箱名 函数名`
244
- repairedTokens.push(currentToken);
245
- i++;
246
- continue;
247
- }
248
- // 找到了一个潜在目标,例如 '扒 纸箱名函数名 ~'
249
- const { value: valueToSplit, line, col } = nextToken;
250
- for (const funcName of sortedFunctionNames) {
251
- // 检查这个函数名是不是标识符的后缀
252
- if (!valueToSplit.endsWith(funcName) || valueToSplit.length <= funcName.length)
253
- continue;
254
- // 找到了!是它喵!
255
- const collectionName = valueToSplit.slice(0, -funcName.length);
256
- // 创建 “纸箱名” 及 “函数名”
257
- const collectionToken = { kind: 19 /* TokenKind.IDENTIFIER */, value: collectionName, line, col };
258
- const functionToken = {
259
- kind: 19 /* TokenKind.IDENTIFIER */,
260
- value: funcName,
261
- line,
262
- col: col + collectionName.length,
263
- };
264
- // 推入修复后的版本
265
- repairedTokens.push(currentToken /*扒*/, collectionToken /*纸箱名*/, functionToken /*函数名*/);
266
- i += 2; // 跳过 '扒' 和 '纸箱名函数名' 这两个原始 Token
267
- continue scanTokens; // 匹配成功,检查下一组词元
268
- }
269
- // 如果没找到匹配,说明它就是一个普通的 `扒 某个变量`,正常推入
270
- repairedTokens.push(currentToken);
271
- i++;
272
- }
273
- if (i <= lastIndex)
274
- repairedTokens.push(tokens[i]); // 补尾
275
- return repairedTokens;
276
- }
277
- //# sourceMappingURL=tokenizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/core/tokenizer.ts"],"names":[],"mappings":"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"}