@aster-cloud/aster-lang-ts 0.0.13 → 0.0.16
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/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +32 -9
- package/dist/src/browser.js.map +1 -1
- package/dist/src/config/lexicons/de-DE.d.ts.map +1 -1
- package/dist/src/config/lexicons/de-DE.js +19 -3
- package/dist/src/config/lexicons/de-DE.js.map +1 -1
- package/dist/src/config/lexicons/zh-CN.d.ts.map +1 -1
- package/dist/src/config/lexicons/zh-CN.js +4 -1
- package/dist/src/config/lexicons/zh-CN.js.map +1 -1
- package/dist/src/frontend/canonicalizer.d.ts.map +1 -1
- package/dist/src/frontend/canonicalizer.js +20 -3
- package/dist/src/frontend/canonicalizer.js.map +1 -1
- package/dist/src/frontend/keyword-translator.d.ts +8 -11
- package/dist/src/frontend/keyword-translator.d.ts.map +1 -1
- package/dist/src/frontend/keyword-translator.js +190 -14
- package/dist/src/frontend/keyword-translator.js.map +1 -1
- package/dist/src/frontend/lexer.d.ts.map +1 -1
- package/dist/src/frontend/lexer.js +13 -2
- package/dist/src/frontend/lexer.js.map +1 -1
- package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
- package/dist/src/parser/expr-stmt-parser.js +11 -2
- package/dist/src/parser/expr-stmt-parser.js.map +1 -1
- package/dist/src/parser/field-variant-parser.d.ts.map +1 -1
- package/dist/src/parser/field-variant-parser.js +3 -2
- package/dist/src/parser/field-variant-parser.js.map +1 -1
- package/dist/src/parser/parser-tools.d.ts.map +1 -1
- package/dist/src/parser/parser-tools.js +4 -1
- package/dist/src/parser/parser-tools.js.map +1 -1
- package/dist/src/parser/type-inference.d.ts.map +1 -1
- package/dist/src/parser/type-inference.js +8 -1
- package/dist/src/parser/type-inference.js.map +1 -1
- package/dist/test/unit/keyword-translator.test.js +10 -9
- package/dist/test/unit/keyword-translator.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,QAAQ,EACR,SAAS,EACT,aAAa,GACd,MAAM,6BAA6B,CAAC;AAGrC,mBAAmB,YAAY,CAAC;AAGhC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC7G,YAAY,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAU1D,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/src/browser.js
CHANGED
|
@@ -49,6 +49,7 @@ import { lex } from './frontend/lexer.js';
|
|
|
49
49
|
import { parse } from './parser.js';
|
|
50
50
|
import { lowerModule } from './lower_to_core.js';
|
|
51
51
|
import { typecheckBrowser as _typecheckBrowser } from './typecheck/browser.js';
|
|
52
|
+
import { createKeywordTranslator, needsKeywordTranslation } from './frontend/keyword-translator.js';
|
|
52
53
|
/**
|
|
53
54
|
* Compile CNL source code to Core IR
|
|
54
55
|
*
|
|
@@ -76,11 +77,19 @@ import { typecheckBrowser as _typecheckBrowser } from './typecheck/browser.js';
|
|
|
76
77
|
*/
|
|
77
78
|
export function compile(source, options) {
|
|
78
79
|
try {
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
const lexicon = options?.lexicon;
|
|
81
|
+
// Step 1: Canonicalize source WITH lexicon for language-specific normalization
|
|
82
|
+
const canonical = canonicalize(source, lexicon);
|
|
81
83
|
// Step 2: Lexical analysis
|
|
82
|
-
|
|
83
|
-
// Step 3:
|
|
84
|
+
let tokens = lex(canonical, lexicon);
|
|
85
|
+
// Step 3: Translate non-English tokens to English for parser compatibility
|
|
86
|
+
// Parser uses hardcoded English keywords (e.g., 'this module is', 'if', 'return')
|
|
87
|
+
// so we need to translate German/Chinese tokens to English before parsing
|
|
88
|
+
if (lexicon && needsKeywordTranslation(lexicon)) {
|
|
89
|
+
const translator = createKeywordTranslator(lexicon);
|
|
90
|
+
tokens = translator.translateTokens(tokens);
|
|
91
|
+
}
|
|
92
|
+
// Step 4: Parse to AST (now with English tokens)
|
|
84
93
|
const ast = parse(tokens);
|
|
85
94
|
// Check for parse errors
|
|
86
95
|
if ('error' in ast || !ast) {
|
|
@@ -124,8 +133,14 @@ export function compile(source, options) {
|
|
|
124
133
|
*/
|
|
125
134
|
export function validateSyntax(source, lexicon) {
|
|
126
135
|
try {
|
|
127
|
-
|
|
128
|
-
const
|
|
136
|
+
// Canonicalize with lexicon for language-specific normalization
|
|
137
|
+
const canonical = canonicalize(source, lexicon);
|
|
138
|
+
let tokens = lex(canonical, lexicon);
|
|
139
|
+
// Translate non-English tokens to English for parser compatibility
|
|
140
|
+
if (lexicon && needsKeywordTranslation(lexicon)) {
|
|
141
|
+
const translator = createKeywordTranslator(lexicon);
|
|
142
|
+
tokens = translator.translateTokens(tokens);
|
|
143
|
+
}
|
|
129
144
|
const ast = parse(tokens);
|
|
130
145
|
if ('error' in ast) {
|
|
131
146
|
return [ast.error];
|
|
@@ -144,7 +159,8 @@ export function validateSyntax(source, lexicon) {
|
|
|
144
159
|
* @returns Array of tokens
|
|
145
160
|
*/
|
|
146
161
|
export function tokenize(source, lexicon) {
|
|
147
|
-
|
|
162
|
+
// Canonicalize with lexicon for language-specific normalization
|
|
163
|
+
const canonical = canonicalize(source, lexicon);
|
|
148
164
|
return lex(canonical, lexicon);
|
|
149
165
|
}
|
|
150
166
|
/**
|
|
@@ -230,9 +246,16 @@ function typeToString(type) {
|
|
|
230
246
|
*/
|
|
231
247
|
export function extractSchema(source, options) {
|
|
232
248
|
try {
|
|
249
|
+
const lexicon = options?.lexicon;
|
|
250
|
+
// Canonicalize with lexicon for language-specific normalization
|
|
251
|
+
const canonical = canonicalize(source, lexicon);
|
|
252
|
+
let tokens = lex(canonical, lexicon);
|
|
253
|
+
// Translate non-English tokens to English for parser compatibility
|
|
254
|
+
if (lexicon && needsKeywordTranslation(lexicon)) {
|
|
255
|
+
const translator = createKeywordTranslator(lexicon);
|
|
256
|
+
tokens = translator.translateTokens(tokens);
|
|
257
|
+
}
|
|
233
258
|
// Parse to AST
|
|
234
|
-
const canonical = canonicalize(source);
|
|
235
|
-
const tokens = lex(canonical, options?.lexicon);
|
|
236
259
|
const ast = parse(tokens);
|
|
237
260
|
if ('error' in ast || !ast) {
|
|
238
261
|
return {
|
package/dist/src/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,sCAAsC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,mDAAmD;AACnD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAO1C,uBAAuB;AACvB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,gDAAgD;AAChD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAUrC,sCAAsC;AACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAG7G,+EAA+E;AAC/E,gDAAgD;AAChD,+EAA+E;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de-DE.d.ts","sourceRoot":"","sources":["../../../../src/config/lexicons/de-DE.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"de-DE.d.ts","sourceRoot":"","sources":["../../../../src/config/lexicons/de-DE.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,OAuJnB,CAAC"}
|
|
@@ -22,7 +22,9 @@ export const DE_DE = {
|
|
|
22
22
|
[SemanticTokenKind.TYPE_WITH]: 'mit',
|
|
23
23
|
[SemanticTokenKind.TYPE_ONE_OF]: 'als eines von',
|
|
24
24
|
// 函数定义
|
|
25
|
-
|
|
25
|
+
// FUNC_TO is the function definition start keyword (like English "To calculate...")
|
|
26
|
+
// German uses "Um" (in order to) or just use English-style keyword
|
|
27
|
+
[SemanticTokenKind.FUNC_TO]: 'Um',
|
|
26
28
|
[SemanticTokenKind.FUNC_PRODUCE]: 'liefert',
|
|
27
29
|
[SemanticTokenKind.FUNC_PERFORMS]: 'führt aus',
|
|
28
30
|
// 控制流
|
|
@@ -113,8 +115,22 @@ export const DE_DE = {
|
|
|
113
115
|
removeArticles: true, // 移除常见冠词以降低噪音
|
|
114
116
|
articles: ['der', 'die', 'das', 'ein', 'eine', 'einen', 'einem', 'einer', 'eines'],
|
|
115
117
|
allowedDuplicates: [
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
// No duplicates needed - "Um" is for functions, "mit" is for type fields
|
|
119
|
+
],
|
|
120
|
+
// ASCII-ized umlaut normalization: convert common ASCII alternatives to proper umlauts
|
|
121
|
+
// This allows users to type "groesser" instead of "größer", "zurueck" instead of "zurück"
|
|
122
|
+
customRules: [
|
|
123
|
+
// Step 1: Handle oe -> ö first (before ss -> ß rules that might depend on it)
|
|
124
|
+
{ name: 'oe-to-ö', pattern: 'oe', replacement: 'ö' },
|
|
125
|
+
// Step 2: Handle ue -> ü (zurueck -> zurück, fuehrt -> führt, pruefe -> prüfe)
|
|
126
|
+
{ name: 'ue-to-ü', pattern: 'ue', replacement: 'ü' },
|
|
127
|
+
// Step 3: Handle ae -> ä (Minderjaehriger -> Minderjähriger)
|
|
128
|
+
{ name: 'ae-to-ä', pattern: 'ae', replacement: 'ä' },
|
|
129
|
+
// Step 4: Handle ss -> ß in specific keyword contexts
|
|
130
|
+
// Note: After step 1, "groesser" becomes "grösser", need to convert "grösser" -> "größer"
|
|
131
|
+
{ name: 'ss-to-ß-grösser', pattern: '\\bgrösser\\b', replacement: 'größer' },
|
|
132
|
+
{ name: 'ss-to-ß-gross', pattern: '\\bgross\\b', replacement: 'groß' },
|
|
133
|
+
{ name: 'ss-to-ß-höchstens', pattern: '\\bhöchstens\\b', replacement: 'höchstens' }, // already correct, no change needed
|
|
118
134
|
],
|
|
119
135
|
},
|
|
120
136
|
messages: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de-DE.js","sourceRoot":"","sources":["../../../../src/config/lexicons/de-DE.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,KAAK;IAEhB,QAAQ,EAAE;QACR,OAAO;QACP,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,kBAAkB;QACnD,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,UAAU;QACtC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,KAAK;QAEvC,OAAO;QACP,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,WAAW;QACzC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,KAAK;QACpC,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,eAAe;QAEhD,OAAO;QACP,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"de-DE.js","sourceRoot":"","sources":["../../../../src/config/lexicons/de-DE.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../../../src/config/lexicons/zh-CN.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"zh-CN.d.ts","sourceRoot":"","sources":["../../../../src/config/lexicons/zh-CN.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,KAAK,EAAE,OA2InB,CAAC"}
|
|
@@ -31,7 +31,10 @@ export const ZH_CN = {
|
|
|
31
31
|
[SemanticTokenKind.TYPE_WITH]: '包含',
|
|
32
32
|
[SemanticTokenKind.TYPE_ONE_OF]: '为以下之一',
|
|
33
33
|
// 函数定义
|
|
34
|
-
|
|
34
|
+
// FUNC_TO is the function definition start keyword (like English "To...")
|
|
35
|
+
// Chinese uses "【函数】" as a marker for clarity
|
|
36
|
+
[SemanticTokenKind.FUNC_TO]: '【函数】',
|
|
37
|
+
// TYPE_WITH will handle "入参" for parameters
|
|
35
38
|
[SemanticTokenKind.FUNC_PRODUCE]: '产出',
|
|
36
39
|
[SemanticTokenKind.FUNC_PERFORMS]: '执行',
|
|
37
40
|
// 控制流
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zh-CN.js","sourceRoot":"","sources":["../../../../src/config/lexicons/zh-CN.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAY;IAC5B,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,KAAK;IAEhB,QAAQ,EAAE;QACR,oBAAoB;QACpB,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM;QACvC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI;QAChC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,IAAI;QAEtC,eAAe;QACf,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM;QACpC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,IAAI;QACnC,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO;QAExC,OAAO;QACP,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"zh-CN.js","sourceRoot":"","sources":["../../../../src/config/lexicons/zh-CN.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonicalizer.d.ts","sourceRoot":"","sources":["../../../src/frontend/canonicalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA0F3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"canonicalizer.d.ts","sourceRoot":"","sources":["../../../src/frontend/canonicalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA0F3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAsHrE"}
|
|
@@ -198,17 +198,34 @@ export function canonicalize(input, lexicon) {
|
|
|
198
198
|
.join('\n');
|
|
199
199
|
// Keep original casing to preserve TypeIdents. We only normalize multi-word keywords by hinting
|
|
200
200
|
// but we leave actual case handling to the parser (case-insensitive compare).
|
|
201
|
+
//
|
|
202
|
+
// To protect multi-word keywords from article removal, we use a marker-based approach:
|
|
203
|
+
// 1. Replace multi-word keywords with unique markers
|
|
204
|
+
// 2. Remove articles
|
|
205
|
+
// 3. Restore multi-word keywords from markers
|
|
201
206
|
let marked = s;
|
|
202
|
-
|
|
207
|
+
const keywordMarkers = new Map();
|
|
208
|
+
let markerIndex = 0;
|
|
209
|
+
// Step 1: Replace multi-word keywords with markers (sorted by length, longest first)
|
|
210
|
+
const sortedKeywords = [...multiWordKeywords].sort((a, b) => b.length - a.length);
|
|
211
|
+
for (const phrase of sortedKeywords) {
|
|
203
212
|
const re = new RegExp(phrase.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'), 'ig');
|
|
204
|
-
marked = marked.replace(re, m =>
|
|
213
|
+
marked = marked.replace(re, m => {
|
|
214
|
+
const marker = `\x00KW${markerIndex++}\x00`;
|
|
215
|
+
keywordMarkers.set(marker, m.toLowerCase());
|
|
216
|
+
return marker;
|
|
217
|
+
});
|
|
205
218
|
}
|
|
206
|
-
// Remove articles in allowed contexts (lightweight; parser will enforce correctness)
|
|
219
|
+
// Step 2: Remove articles in allowed contexts (lightweight; parser will enforce correctness)
|
|
207
220
|
if (articleRe) {
|
|
208
221
|
marked = segmentString(marked, quotes)
|
|
209
222
|
.map(segment => (segment.inString ? segment.text : segment.text.replace(articleRe, '')))
|
|
210
223
|
.join('');
|
|
211
224
|
}
|
|
225
|
+
// Step 3: Restore multi-word keywords from markers
|
|
226
|
+
for (const [marker, keyword] of keywordMarkers) {
|
|
227
|
+
marked = marked.replace(marker, keyword);
|
|
228
|
+
}
|
|
212
229
|
// Do not collapse newlines globally.
|
|
213
230
|
marked = marked.replace(/^\s+$/gm, '');
|
|
214
231
|
// Final whitespace normalization to ensure idempotency after article/macro passes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonicalizer.js","sourceRoot":"","sources":["../../../src/frontend/canonicalizer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"canonicalizer.js","sourceRoot":"","sources":["../../../src/frontend/canonicalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,13 +57,6 @@ export interface TranslationIndexResult {
|
|
|
57
57
|
* @returns 翻译索引:源关键词 -> 目标关键词
|
|
58
58
|
*/
|
|
59
59
|
export declare function buildKeywordTranslationIndex(sourceLexicon: Lexicon, targetLexicon?: Lexicon): KeywordTranslationIndex;
|
|
60
|
-
/**
|
|
61
|
-
* 构建完整的翻译索引(包括普通关键词和标记关键词)。
|
|
62
|
-
*
|
|
63
|
-
* @param sourceLexicon - 源词法表(如 zh-CN)
|
|
64
|
-
* @param targetLexicon - 目标词法表(默认 en-US)
|
|
65
|
-
* @returns 包含普通索引和标记索引的结果
|
|
66
|
-
*/
|
|
67
60
|
export declare function buildFullTranslationIndex(sourceLexicon: Lexicon, targetLexicon?: Lexicon): TranslationIndexResult;
|
|
68
61
|
/**
|
|
69
62
|
* 翻译单个 token 的值。
|
|
@@ -82,10 +75,14 @@ export declare function translateToken(token: Token, index: KeywordTranslationIn
|
|
|
82
75
|
*/
|
|
83
76
|
export declare function translateTokens(tokens: readonly Token[], index: KeywordTranslationIndex): Token[];
|
|
84
77
|
/**
|
|
85
|
-
* 翻译 token
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
78
|
+
* 翻译 token 流中的所有关键词(包括标记关键词序列和多词短语)。
|
|
79
|
+
*
|
|
80
|
+
* 此函数处理三种情况:
|
|
81
|
+
* 1. LBRACKET + IDENT + RBRACKET 序列(标记关键词)
|
|
82
|
+
* 2. 多个连续 IDENT token 组成的短语翻译:
|
|
83
|
+
* - 源和目标词数相同时,逐词翻译(保持 token 数量)
|
|
84
|
+
* - 源词数多于目标词数时,合并为较少的 token(如 "gib zurück" -> "return")
|
|
85
|
+
* 3. 单个 token 的翻译
|
|
89
86
|
*
|
|
90
87
|
* @param tokens - 原始 token 数组
|
|
91
88
|
* @param index - 普通关键词翻译索引
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword-translator.d.ts","sourceRoot":"","sources":["../../../src/frontend/keyword-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAI3D;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD;;;;;;;;GAQG;AACH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,OAAO,EACtB,aAAa,GAAE,OAAe,GAC7B,uBAAuB,CAGzB;
|
|
1
|
+
{"version":3,"file":"keyword-translator.d.ts","sourceRoot":"","sources":["../../../src/frontend/keyword-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAI3D;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErD;;;;;;;;GAQG;AACH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,8BAA8B;IAC9B,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,OAAO,EACtB,aAAa,GAAE,OAAe,GAC7B,uBAAuB,CAGzB;AAqBD,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,OAAO,EACtB,aAAa,GAAE,OAAe,GAC7B,sBAAsB,CA2DxB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,KAAK,CAsBlF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,KAAK,EAAE,uBAAuB,GAC7B,KAAK,EAAE,CAET;AAaD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,KAAK,EAAE,uBAAuB,EAC9B,WAAW,EAAE,kBAAkB,GAC9B,KAAK,EAAE,CAsKT;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,OAAO,EACtB,aAAa,GAAE,OAAe;IAK5B,gBAAgB;;IAGhB,0BAA0B;;IAG1B,iBAAiB;4BACO,KAAK,KAAG,KAAK;IAErC,+BAA+B;8BACL,SAAS,KAAK,EAAE,KAAG,KAAK,EAAE;IAGpD,mBAAmB;4BACK,MAAM,KAAG,OAAO;IAExC,kBAAkB;4BACM,MAAM,KAAG,MAAM,GAAG,SAAS;IAEnD,mBAAmB;kCACW,MAAM,KAAG,OAAO;IAE9C,kBAAkB;kCACY,MAAM,KAAG,MAAM,GAAG,SAAS;EAE5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,OAAO,EACtB,aAAa,GAAE,OAAe,GAC7B,OAAO,CAET"}
|
|
@@ -37,9 +37,22 @@ export function buildKeywordTranslationIndex(sourceLexicon, targetLexicon = EN_U
|
|
|
37
37
|
* @param targetLexicon - 目标词法表(默认 en-US)
|
|
38
38
|
* @returns 包含普通索引和标记索引的结果
|
|
39
39
|
*/
|
|
40
|
+
// 高优先级的关键词种类,在发生冲突时优先使用
|
|
41
|
+
// 这些通常是更具语义特异性的关键词
|
|
42
|
+
const HIGH_PRIORITY_KINDS = new Set([
|
|
43
|
+
SemanticTokenKind.TYPE_WITH, // "with" 用于类型定义比 "to" 更特定
|
|
44
|
+
SemanticTokenKind.MODULE_DECL, // 模块声明
|
|
45
|
+
SemanticTokenKind.TYPE_DEF, // 类型定义
|
|
46
|
+
SemanticTokenKind.IF, // 条件控制
|
|
47
|
+
SemanticTokenKind.RETURN, // 返回语句
|
|
48
|
+
SemanticTokenKind.GREATER_THAN, // 比较运算
|
|
49
|
+
SemanticTokenKind.LESS_THAN, // 比较运算
|
|
50
|
+
]);
|
|
40
51
|
export function buildFullTranslationIndex(sourceLexicon, targetLexicon = EN_US) {
|
|
41
52
|
const index = new Map();
|
|
42
53
|
const markerIndex = new Map();
|
|
54
|
+
// 记录已添加映射的优先级
|
|
55
|
+
const indexPriority = new Map();
|
|
43
56
|
// 获取源词法表的标记符号
|
|
44
57
|
const markers = sourceLexicon.punctuation.markers;
|
|
45
58
|
const markerOpen = markers?.open || '【';
|
|
@@ -48,6 +61,7 @@ export function buildFullTranslationIndex(sourceLexicon, targetLexicon = EN_US)
|
|
|
48
61
|
for (const kind of Object.values(SemanticTokenKind)) {
|
|
49
62
|
const sourceKeyword = sourceLexicon.keywords[kind];
|
|
50
63
|
const targetKeyword = targetLexicon.keywords[kind];
|
|
64
|
+
const isHighPriority = HIGH_PRIORITY_KINDS.has(kind);
|
|
51
65
|
if (sourceKeyword && targetKeyword && sourceKeyword !== targetKeyword) {
|
|
52
66
|
// 检查是否是标记关键词(被【】包裹)
|
|
53
67
|
if (sourceKeyword.startsWith(markerOpen) && sourceKeyword.endsWith(markerClose)) {
|
|
@@ -56,8 +70,34 @@ export function buildFullTranslationIndex(sourceLexicon, targetLexicon = EN_US)
|
|
|
56
70
|
markerIndex.set(innerValue.toLowerCase(), targetKeyword);
|
|
57
71
|
}
|
|
58
72
|
else {
|
|
59
|
-
|
|
60
|
-
|
|
73
|
+
const srcLower = sourceKeyword.toLowerCase();
|
|
74
|
+
const existingPriority = indexPriority.get(srcLower);
|
|
75
|
+
// 只在以下情况添加映射:
|
|
76
|
+
// 1. 源词尚未有映射
|
|
77
|
+
// 2. 当前是高优先级且现有不是高优先级
|
|
78
|
+
if (!index.has(srcLower) || (isHighPriority && !existingPriority)) {
|
|
79
|
+
index.set(srcLower, targetKeyword);
|
|
80
|
+
indexPriority.set(srcLower, isHighPriority);
|
|
81
|
+
}
|
|
82
|
+
// 对于多词关键词短语,同时添加逐词映射
|
|
83
|
+
// 例如 "Dieses Modul ist" -> "this module is"
|
|
84
|
+
// 会分解为 "dieses" -> "this", "modul" -> "module", "ist" -> "is"
|
|
85
|
+
const sourceParts = sourceKeyword.toLowerCase().split(/\s+/);
|
|
86
|
+
const targetParts = targetKeyword.toLowerCase().split(/\s+/);
|
|
87
|
+
if (sourceParts.length > 1 && sourceParts.length === targetParts.length) {
|
|
88
|
+
for (let i = 0; i < sourceParts.length; i++) {
|
|
89
|
+
const srcWord = sourceParts[i];
|
|
90
|
+
const tgtWord = targetParts[i];
|
|
91
|
+
const existingWordPriority = indexPriority.get(srcWord);
|
|
92
|
+
// 添加逐词映射(遵循相同的优先级规则)
|
|
93
|
+
if (srcWord !== tgtWord) {
|
|
94
|
+
if (!index.has(srcWord) || (isHighPriority && !existingWordPriority)) {
|
|
95
|
+
index.set(srcWord, tgtWord);
|
|
96
|
+
indexPriority.set(srcWord, isHighPriority);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
61
101
|
}
|
|
62
102
|
}
|
|
63
103
|
}
|
|
@@ -101,10 +141,22 @@ export function translateTokens(tokens, index) {
|
|
|
101
141
|
return tokens.map(token => translateToken(token, index));
|
|
102
142
|
}
|
|
103
143
|
/**
|
|
104
|
-
*
|
|
144
|
+
* 检查 token 是否是可翻译的标识符类型
|
|
145
|
+
*/
|
|
146
|
+
function isTranslatableToken(token) {
|
|
147
|
+
return (token.kind === TokenKind.IDENT ||
|
|
148
|
+
token.kind === TokenKind.TYPE_IDENT ||
|
|
149
|
+
token.kind === TokenKind.KEYWORD);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 翻译 token 流中的所有关键词(包括标记关键词序列和多词短语)。
|
|
105
153
|
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
154
|
+
* 此函数处理三种情况:
|
|
155
|
+
* 1. LBRACKET + IDENT + RBRACKET 序列(标记关键词)
|
|
156
|
+
* 2. 多个连续 IDENT token 组成的短语翻译:
|
|
157
|
+
* - 源和目标词数相同时,逐词翻译(保持 token 数量)
|
|
158
|
+
* - 源词数多于目标词数时,合并为较少的 token(如 "gib zurück" -> "return")
|
|
159
|
+
* 3. 单个 token 的翻译
|
|
108
160
|
*
|
|
109
161
|
* @param tokens - 原始 token 数组
|
|
110
162
|
* @param index - 普通关键词翻译索引
|
|
@@ -114,9 +166,17 @@ export function translateTokens(tokens, index) {
|
|
|
114
166
|
export function translateTokensWithMarkers(tokens, index, markerIndex) {
|
|
115
167
|
const result = [];
|
|
116
168
|
let i = 0;
|
|
169
|
+
// 预先计算多词短语的最大长度(用于优化查找)
|
|
170
|
+
let maxPhraseLength = 1;
|
|
171
|
+
for (const key of index.keys()) {
|
|
172
|
+
const wordCount = key.split(/\s+/).length;
|
|
173
|
+
if (wordCount > maxPhraseLength) {
|
|
174
|
+
maxPhraseLength = wordCount;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
117
177
|
while (i < tokens.length) {
|
|
118
178
|
const token = tokens[i];
|
|
119
|
-
// 检查是否是 LBRACKET + IDENT + RBRACKET
|
|
179
|
+
// 检查是否是 LBRACKET + IDENT + RBRACKET 序列(标记关键词)
|
|
120
180
|
if (token.kind === TokenKind.LBRACKET &&
|
|
121
181
|
i + 2 < tokens.length &&
|
|
122
182
|
(tokens[i + 1].kind === TokenKind.IDENT || tokens[i + 1].kind === TokenKind.TYPE_IDENT) &&
|
|
@@ -125,18 +185,134 @@ export function translateTokensWithMarkers(tokens, index, markerIndex) {
|
|
|
125
185
|
const innerValue = innerToken.value;
|
|
126
186
|
const translated = markerIndex.get(innerValue.toLowerCase());
|
|
127
187
|
if (translated) {
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
188
|
+
// 找到标记关键词
|
|
189
|
+
// 如果翻译结果是多词(如 "this module is"),需要拆分为多个 token
|
|
190
|
+
const targetWords = translated.split(/\s+/);
|
|
191
|
+
if (targetWords.length === 1) {
|
|
192
|
+
// 单词翻译:合并为单个 TYPE_IDENT token
|
|
193
|
+
result.push({
|
|
194
|
+
kind: TokenKind.TYPE_IDENT,
|
|
195
|
+
value: translated,
|
|
196
|
+
start: token.start,
|
|
197
|
+
end: tokens[i + 2].end,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
// 多词翻译:拆分为多个 IDENT token(第一个保持 TYPE_IDENT)
|
|
202
|
+
const startPos = token.start;
|
|
203
|
+
const endPos = tokens[i + 2].end;
|
|
204
|
+
for (let j = 0; j < targetWords.length; j++) {
|
|
205
|
+
result.push({
|
|
206
|
+
kind: j === 0 ? TokenKind.TYPE_IDENT : TokenKind.IDENT,
|
|
207
|
+
value: targetWords[j],
|
|
208
|
+
start: startPos,
|
|
209
|
+
end: endPos,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
135
213
|
i += 3; // 跳过三个 token
|
|
136
214
|
continue;
|
|
137
215
|
}
|
|
138
216
|
}
|
|
139
|
-
//
|
|
217
|
+
// 尝试多词短语翻译(从最长匹配开始,贪婪匹配)
|
|
218
|
+
if (isTranslatableToken(token)) {
|
|
219
|
+
let matched = false;
|
|
220
|
+
// 从最长可能的短语开始尝试匹配
|
|
221
|
+
for (let phraseLen = Math.min(maxPhraseLength, tokens.length - i); phraseLen > 1; phraseLen--) {
|
|
222
|
+
// 检查接下来的 token 是否都是可翻译类型
|
|
223
|
+
let allTranslatable = true;
|
|
224
|
+
const phraseTokens = [];
|
|
225
|
+
for (let j = 0; j < phraseLen; j++) {
|
|
226
|
+
const t = tokens[i + j];
|
|
227
|
+
if (!isTranslatableToken(t)) {
|
|
228
|
+
allTranslatable = false;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
phraseTokens.push(t);
|
|
232
|
+
}
|
|
233
|
+
if (!allTranslatable)
|
|
234
|
+
continue;
|
|
235
|
+
// 构建短语并查找翻译
|
|
236
|
+
const phrase = phraseTokens.map(t => t.value.toLowerCase()).join(' ');
|
|
237
|
+
const translated = index.get(phrase);
|
|
238
|
+
if (translated) {
|
|
239
|
+
// 计算翻译目标的词数
|
|
240
|
+
const targetWords = translated.split(/\s+/);
|
|
241
|
+
const targetWordCount = targetWords.length;
|
|
242
|
+
if (targetWordCount === phraseLen) {
|
|
243
|
+
// 源和目标词数相同:逐词翻译,保持 token 数量
|
|
244
|
+
// 例如 "dieses modul ist" -> "this module is" 保持 3 个 token
|
|
245
|
+
for (let j = 0; j < phraseLen; j++) {
|
|
246
|
+
const srcToken = phraseTokens[j];
|
|
247
|
+
result.push({
|
|
248
|
+
kind: srcToken.kind,
|
|
249
|
+
value: targetWords[j],
|
|
250
|
+
start: srcToken.start,
|
|
251
|
+
end: srcToken.end,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (targetWordCount < phraseLen) {
|
|
256
|
+
// 目标词数少于源词数:合并为较少的 token
|
|
257
|
+
// 例如 "gib zurück" (2) -> "return" (1)
|
|
258
|
+
// 为每个目标词创建一个 token,位置信息从源 token 分配
|
|
259
|
+
for (let j = 0; j < targetWordCount; j++) {
|
|
260
|
+
// 计算每个目标词对应的源 token 范围
|
|
261
|
+
const srcStartIdx = Math.floor(j * phraseLen / targetWordCount);
|
|
262
|
+
const srcEndIdx = Math.floor((j + 1) * phraseLen / targetWordCount) - 1;
|
|
263
|
+
const srcStartToken = phraseTokens[srcStartIdx];
|
|
264
|
+
const srcEndToken = phraseTokens[srcEndIdx];
|
|
265
|
+
result.push({
|
|
266
|
+
kind: srcStartToken.kind,
|
|
267
|
+
value: targetWords[j],
|
|
268
|
+
start: srcStartToken.start,
|
|
269
|
+
end: srcEndToken.end,
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// 目标词数多于源词数(如中文 "至少" -> 英文 "at least")
|
|
275
|
+
// 需要拆分为多个 token
|
|
276
|
+
const firstToken = phraseTokens[0];
|
|
277
|
+
const lastToken = phraseTokens[phraseLen - 1];
|
|
278
|
+
for (let j = 0; j < targetWordCount; j++) {
|
|
279
|
+
result.push({
|
|
280
|
+
kind: firstToken.kind,
|
|
281
|
+
value: targetWords[j],
|
|
282
|
+
start: firstToken.start,
|
|
283
|
+
end: lastToken.end,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
i += phraseLen; // 跳过所有匹配的 token
|
|
288
|
+
matched = true;
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (matched)
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
// 普通单 token 翻译(需要处理单词→多词的情况,如 "至少" → "at least")
|
|
296
|
+
if (isTranslatableToken(token)) {
|
|
297
|
+
const value = token.value;
|
|
298
|
+
const translated = index.get(value.toLowerCase());
|
|
299
|
+
if (translated) {
|
|
300
|
+
const targetWords = translated.split(/\s+/);
|
|
301
|
+
if (targetWords.length > 1) {
|
|
302
|
+
// 单源词→多目标词:拆分为多个 token
|
|
303
|
+
for (const word of targetWords) {
|
|
304
|
+
result.push({
|
|
305
|
+
kind: token.kind,
|
|
306
|
+
value: word,
|
|
307
|
+
start: token.start,
|
|
308
|
+
end: token.end,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
i++;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
140
316
|
result.push(translateToken(token, index));
|
|
141
317
|
i++;
|
|
142
318
|
}
|