aurora-langium 0.2.1 → 0.2.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/cjs/cli/index.cjs +131198 -0
- package/dist/cjs/cli/index.cjs.map +7 -0
- package/dist/cjs/src/cli/cli-util.js.map +1 -1
- package/dist/cjs/src/cli/index.js +17 -0
- package/dist/cjs/src/cli/index.js.map +1 -0
- package/dist/cjs/src/cli/main.js +3 -0
- package/dist/cjs/src/cli/main.js.map +1 -1
- package/dist/cjs/test/aurora-arith/arith-parser-multi.test.js +57 -0
- package/dist/cjs/test/aurora-arith/arith-parser-multi.test.js.map +1 -0
- package/dist/cjs/test/aurora-arith/arith-parser-ternary.test.js +61 -0
- package/dist/cjs/test/aurora-arith/arith-parser-ternary.test.js.map +1 -0
- package/dist/cjs/test/aurora-arith/arith-parser.test.js +61 -0
- package/dist/cjs/test/aurora-arith/arith-parser.test.js.map +1 -0
- package/dist/esm/cli/main.js +134876 -0
- package/dist/esm/cli/main.js.map +7 -0
- package/dist/esm/extension/langclientconfig.js +20967 -0
- package/dist/esm/extension/langclientconfig.js.map +7 -0
- package/dist/esm/src/cli/cli-util.js.map +1 -1
- package/dist/esm/src/cli/index.js +12 -0
- package/dist/esm/src/cli/index.js.map +1 -0
- package/dist/esm/src/cli/main.js +3 -0
- package/dist/esm/src/cli/main.js.map +1 -1
- package/dist/esm/test/aurora-arith/arith-parser-multi.test.js +52 -0
- package/dist/esm/test/aurora-arith/arith-parser-multi.test.js.map +1 -0
- package/dist/esm/test/aurora-arith/arith-parser-ternary.test.js +56 -0
- package/dist/esm/test/aurora-arith/arith-parser-ternary.test.js.map +1 -0
- package/dist/esm/test/aurora-arith/arith-parser.test.js +56 -0
- package/dist/esm/test/aurora-arith/arith-parser.test.js.map +1 -0
- package/dist/types/src/cli/index.d.ts +6 -0
- package/dist/types/test/aurora-arith/arith-parser-multi.test.d.ts +1 -0
- package/dist/types/test/aurora-arith/arith-parser-ternary.test.d.ts +1 -0
- package/dist/types/test/aurora-arith/arith-parser.test.d.ts +1 -0
- package/package.json +7 -1
- package/src/cli/cli-util.ts +3 -0
- package/src/cli/index.ts +16 -0
- package/src/cli/main.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-util.js","sourceRoot":"","sources":["../../../../src/cli/cli-util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-util.js","sourceRoot":"","sources":["../../../../src/cli/cli-util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAK9B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,QAA6B;;IACjF,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;QAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,sDAAsD,UAAU,GAAG,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,QAAQ,kBAAkB,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAExF,MAAM,gBAAgB,GAAG,CAAC,MAAA,QAAQ,CAAC,WAAW,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;IACpF,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE;YAC5C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CACnB,QAAQ,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,eAAe,CAAC,OAAO,KAAK,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CACvI,CAAC,CAAC;SACN;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAoB,QAAgB,EAAE,QAA6B;;IACnG,OAAO,MAAA,CAAC,MAAM,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,0CAAE,KAAU,CAAC;AAC/E,CAAC;AAOD,MAAM,UAAU,yBAAyB,CAAC,QAAgB,EAAE,WAA+B;IACvF,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO;QACH,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;QAC1E,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAChC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createAuroraServices } from '../language/aurora-module.js';
|
|
2
|
+
import { extractAstNode } from './cli-util.js';
|
|
3
|
+
import { NodeFileSystem } from 'langium/node';
|
|
4
|
+
import { CstUtils, AstUtils } from 'langium';
|
|
5
|
+
export { CstUtils, AstUtils };
|
|
6
|
+
/** utility function parse a filename to PCM */
|
|
7
|
+
export const parse = async (fileName) => {
|
|
8
|
+
const services = createAuroraServices(NodeFileSystem).Aurora;
|
|
9
|
+
const module = await extractAstNode(fileName, services);
|
|
10
|
+
return module;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAA;AAC1B,+CAA+C;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,QAAgB,EAAgB,EAAE;IAC1D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAM,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE7D,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
|
package/dist/esm/src/cli/main.js
CHANGED
|
@@ -7,6 +7,9 @@ import { generateJavaScript } from './generator.js';
|
|
|
7
7
|
import { NodeFileSystem } from 'langium/node';
|
|
8
8
|
import * as fs from 'node:fs/promises';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
|
+
/**the stuff below merely finds the package.json to find the version number so the command line can know this.
|
|
11
|
+
* this is not important right now
|
|
12
|
+
*/
|
|
10
13
|
const __dirname = path.resolve();
|
|
11
14
|
const packagePath = path.resolve(__dirname, '..', '..', 'package.json');
|
|
12
15
|
async function loadPackageContent() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/cli/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../src/cli/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAExE,KAAK,UAAU,kBAAkB;IAC7B,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;IACxC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7E,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,QAAgB,EAAE,IAAqB,EAAiB,EAAE;IAC3F,MAAM,QAAQ,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAM,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2CAA2C,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAC7F,CAAC,CAAC;AAMF,KAAK,UAAU,IAAI;IACf,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAElD,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAExC,MAAM,cAAc,GAAG,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,OAAO;SACF,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CAAC,QAAQ,EAAE,0CAA0C,cAAc,GAAG,CAAC;SAC/E,MAAM,CAAC,yBAAyB,EAAE,qCAAqC,CAAC;SACxE,WAAW,CAAC,2FAA2F,CAAC;SACxG,MAAM,CAAC,cAAc,CAAC,CAAC;IAE5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { expect, test } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { interpretEvaluations } from '../../src/language/aurora-arith-evaluator.js';
|
|
5
|
+
import { parse } from '../../src/cli/index.js';
|
|
6
|
+
const __dirname = path.relative(process.cwd(), path.dirname(__filename)); // Relative to the current working directory
|
|
7
|
+
test('ArithParserMultiTest: multiexpressions file works', async () => {
|
|
8
|
+
try {
|
|
9
|
+
const filePath = path.resolve(__dirname, 'resources', 'math3.aurora');
|
|
10
|
+
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
11
|
+
const module = await parse(filePath);
|
|
12
|
+
const arithModule = module.elements.find(el => el.$type === "Arith_Module");
|
|
13
|
+
expect(arithModule.name).toBe('multiexpressions');
|
|
14
|
+
const results = interpretEvaluations(module);
|
|
15
|
+
const evaluations = arithModule.statements.filter(s => s.$type === 'Evaluation');
|
|
16
|
+
expect(results.size).toBe(evaluations.length);
|
|
17
|
+
const testCases = [];
|
|
18
|
+
results.forEach((computedValue, evaluation) => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
const exprText = extractExpressionText(fileContent, ((_a = evaluation.expression.$cstNode) === null || _a === void 0 ? void 0 : _a.offset) || 0, ((_b = evaluation.expression.$cstNode) === null || _b === void 0 ? void 0 : _b.length) || 0);
|
|
21
|
+
const expected = safeEvaluate(exprText);
|
|
22
|
+
testCases.push({
|
|
23
|
+
expression: exprText,
|
|
24
|
+
computed: Number(computedValue),
|
|
25
|
+
expected: Number(expected)
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
testCases.forEach(({ expression, computed, expected }) => {
|
|
29
|
+
console.log(`Testing: ${expression} → Computed: ${computed}, Expected: ${expected}`);
|
|
30
|
+
expect(computed, `Mismatch in expression: ${expression}`).toBe(expected);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
console.error('Test failed:', e);
|
|
35
|
+
throw e;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
function extractExpressionText(content, offset, length) {
|
|
39
|
+
return content.slice(offset, offset + length).trim();
|
|
40
|
+
}
|
|
41
|
+
function safeEvaluate(expression) {
|
|
42
|
+
const jsExpression = expression
|
|
43
|
+
.replace(/\^/g, '**')
|
|
44
|
+
.replace(/;/g, '');
|
|
45
|
+
try {
|
|
46
|
+
return Function(`"use strict"; return (${jsExpression})`)();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error(`Evaluation failed for: ${expression} - ${error}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=arith-parser-multi.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arith-parser-multi.test.js","sourceRoot":"","sources":["../../../../test/aurora-arith/arith-parser-multi.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { expect, test } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { interpretEvaluations } from '../../src/language/aurora-arith-evaluator.js';
|
|
5
|
+
import { parse } from '../../src/cli/index.js';
|
|
6
|
+
const __dirname = path.relative(process.cwd(), path.dirname(__filename)); // Relative to the current working directory
|
|
7
|
+
test('ArithParserTernaryTest: ternaryexpressions file works', async () => {
|
|
8
|
+
try {
|
|
9
|
+
const filePath = path.resolve(__dirname, 'resources', 'math2.aurora');
|
|
10
|
+
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
11
|
+
const module = await parse(filePath);
|
|
12
|
+
const arithModule = module.elements.find(el => el.$type === "Arith_Module");
|
|
13
|
+
expect(arithModule.name).toBe('ternaryexpressions');
|
|
14
|
+
const results = interpretEvaluations(module);
|
|
15
|
+
const lines = fileContent.split('{')
|
|
16
|
+
.map(line => line.trim())
|
|
17
|
+
.filter(line => (line.length > 0 && !line.startsWith('arith_module')));
|
|
18
|
+
const eval_lines = lines.reverse()[0].split('}')[0].split(';').map(line => line.trim()).filter(line => line.length > 0);
|
|
19
|
+
expect(results.size).toBe(eval_lines.length);
|
|
20
|
+
const testCases = [];
|
|
21
|
+
let index = 0;
|
|
22
|
+
results.forEach((computedValue, evaluation) => {
|
|
23
|
+
const originalExpression = eval_lines[index];
|
|
24
|
+
const computed = Number(computedValue);
|
|
25
|
+
const expected = safeEvaluate(originalExpression);
|
|
26
|
+
testCases.push({
|
|
27
|
+
expression: originalExpression,
|
|
28
|
+
computed,
|
|
29
|
+
expected
|
|
30
|
+
});
|
|
31
|
+
index++;
|
|
32
|
+
});
|
|
33
|
+
testCases.forEach(({ expression, computed, expected }) => {
|
|
34
|
+
console.log(`Testing: ${expression} → Computed: ${computed}, Expected: ${expected}`);
|
|
35
|
+
expect(computed, `Mismatch in expression: ${expression}`).toBe(expected);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
console.error('Test failed:', e);
|
|
40
|
+
throw e;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
function safeEvaluate(expression) {
|
|
44
|
+
const jsExpression = expression
|
|
45
|
+
.replace(/\^/g, '**')
|
|
46
|
+
.replace(/%/g, '%')
|
|
47
|
+
.replace(/\//g, '/')
|
|
48
|
+
.replace(/\*/g, '*');
|
|
49
|
+
try {
|
|
50
|
+
return Function(`"use strict"; return (${jsExpression})`)();
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new Error(`Failed to evaluate expression: ${expression} - ${error}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=arith-parser-ternary.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arith-parser-ternary.test.js","sourceRoot":"","sources":["../../../../test/aurora-arith/arith-parser-ternary.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,4CAA4C;AAQtH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;IACrE,IAAI;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAQ,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,cAAc,CAAiB,CAAA;QAC3F,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;aAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAE,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAExH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE;YAC1C,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;YAElD,SAAS,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,kBAAkB;gBAC9B,QAAQ;gBACR,QAAQ;aACX,CAAC,CAAC;YAEH,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;YACrD,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,gBAAgB,QAAQ,eAAe,QAAQ,EAAE,CAAC,CAAC;YACrF,MAAM,CAAC,QAAQ,EAAE,2BAA2B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;KAEN;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC;KACX;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,YAAY,CAAC,UAAkB;IAEpC,MAAM,YAAY,GAAG,UAAU;SAC1B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEzB,IAAI;QAEA,OAAO,QAAQ,CAAC,yBAAyB,YAAY,GAAG,CAAC,EAAE,CAAC;KAC/D;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,MAAM,KAAK,EAAE,CAAC,CAAC;KAC9E;AACL,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { expect, test } from 'vitest';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { interpretEvaluations } from '../../src/language/aurora-arith-evaluator.js';
|
|
5
|
+
import { parse } from '../../src/cli/index.js';
|
|
6
|
+
const __dirname = path.relative(process.cwd(), path.dirname(__filename)); // Relative to the current working directory
|
|
7
|
+
test('ArithParserTest: binaryexpressions file works', async () => {
|
|
8
|
+
try {
|
|
9
|
+
const filePath = path.resolve(__dirname, 'resources', 'math1.aurora');
|
|
10
|
+
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
11
|
+
const module = await parse(filePath);
|
|
12
|
+
const arithModule = module.elements.find(el => el.$type === "Arith_Module");
|
|
13
|
+
expect(arithModule.name).toBe('binaryexpressions');
|
|
14
|
+
const results = interpretEvaluations(module);
|
|
15
|
+
expect(results.size).toBe(6);
|
|
16
|
+
const testCases = [];
|
|
17
|
+
let processedCount = 0;
|
|
18
|
+
results.forEach((computedValue, evaluation) => {
|
|
19
|
+
const expr = evaluation.expression;
|
|
20
|
+
const source = fileContent.split('\n')[processedCount + 1].trim().replace(';', '');
|
|
21
|
+
if (expr.$type === 'BinaryExpression') {
|
|
22
|
+
const left = expr.left.value;
|
|
23
|
+
const right = expr.right.value;
|
|
24
|
+
const operator = expr.operator;
|
|
25
|
+
const expected = calculateExpected(left, operator, right);
|
|
26
|
+
testCases.push({
|
|
27
|
+
expression: source,
|
|
28
|
+
computed: Number(computedValue),
|
|
29
|
+
expected: Number(expected)
|
|
30
|
+
});
|
|
31
|
+
processedCount++;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
expect(processedCount).toBe(6);
|
|
35
|
+
testCases.forEach(({ expression, computed, expected }) => {
|
|
36
|
+
console.log(`Testing: ${expression} → Computed: ${computed}, Expected: ${expected}`);
|
|
37
|
+
expect(computed, `Mismatch in expression: ${expression}`).toBe(expected);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
console.error('Test failed:', e);
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
function calculateExpected(left, operator, right) {
|
|
46
|
+
switch (operator) {
|
|
47
|
+
case '+': return left + right;
|
|
48
|
+
case '-': return left - right;
|
|
49
|
+
case '*': return left * right;
|
|
50
|
+
case '/': return left / right;
|
|
51
|
+
case '^': return Math.pow(left, right);
|
|
52
|
+
case '%': return left % right;
|
|
53
|
+
default: throw new Error(`Unknown operator: ${operator}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=arith-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arith-parser.test.js","sourceRoot":"","sources":["../../../../test/aurora-arith/arith-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**makes thes utils usable from ScalablyTyped perspective */
|
|
2
|
+
import type { PCM } from '../language/generated/ast.js';
|
|
3
|
+
import { CstUtils, AstUtils } from 'langium';
|
|
4
|
+
export { CstUtils, AstUtils };
|
|
5
|
+
/** utility function parse a filename to PCM */
|
|
6
|
+
export declare const parse: (fileName: string) => Promise<PCM>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aurora-langium",
|
|
3
3
|
"description": "It contains the DSL named Aurora",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.2",
|
|
5
5
|
"files": [
|
|
6
6
|
"bin",
|
|
7
7
|
"out",
|
|
@@ -26,7 +26,13 @@
|
|
|
26
26
|
"import": "./dist/cjs/extension/main.cjs",
|
|
27
27
|
"require": "./dist/cjs/extension/main.cjs",
|
|
28
28
|
"types": "./dist/types/src/extension/main.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./cli": {
|
|
31
|
+
"import": "./dist/cjs/cli/index.cjs",
|
|
32
|
+
"require": "./dist/cjs/cli/index.cjs",
|
|
33
|
+
"types": "./dist/types/src/cli/index.d.ts"
|
|
29
34
|
}
|
|
35
|
+
|
|
30
36
|
},
|
|
31
37
|
"types": "dist/types/index.d.ts",
|
|
32
38
|
"scripts": {
|
package/src/cli/cli-util.ts
CHANGED
|
@@ -4,6 +4,9 @@ import * as path from 'node:path';
|
|
|
4
4
|
import * as fs from 'node:fs';
|
|
5
5
|
import { URI } from 'langium';
|
|
6
6
|
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
7
10
|
export async function extractDocument(fileName: string, services: LangiumCoreServices): Promise<LangiumDocument> {
|
|
8
11
|
const extensions = services.LanguageMetaData.fileExtensions;
|
|
9
12
|
if (!extensions.includes(path.extname(fileName))) {
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**makes thes utils usable from ScalablyTyped perspective */
|
|
2
|
+
import type { PCM} from '../language/generated/ast.js';
|
|
3
|
+
import { createAuroraServices } from '../language/aurora-module.js';
|
|
4
|
+
import { extractAstNode } from './cli-util.js';
|
|
5
|
+
import { NodeFileSystem } from 'langium/node';
|
|
6
|
+
|
|
7
|
+
import { CstUtils,AstUtils} from 'langium'
|
|
8
|
+
export {CstUtils,AstUtils}
|
|
9
|
+
/** utility function parse a filename to PCM */
|
|
10
|
+
export const parse = async (fileName: string): Promise<PCM> => {
|
|
11
|
+
const services = createAuroraServices(NodeFileSystem).Aurora;
|
|
12
|
+
const module = await extractAstNode<PCM>(fileName, services);
|
|
13
|
+
|
|
14
|
+
return module;
|
|
15
|
+
};
|
|
16
|
+
|
package/src/cli/main.ts
CHANGED
|
@@ -9,6 +9,10 @@ import { NodeFileSystem } from 'langium/node';
|
|
|
9
9
|
import * as fs from 'node:fs/promises';
|
|
10
10
|
import * as path from 'node:path';
|
|
11
11
|
|
|
12
|
+
|
|
13
|
+
/**the stuff below merely finds the package.json to find the version number so the command line can know this.
|
|
14
|
+
* this is not important right now
|
|
15
|
+
*/
|
|
12
16
|
const __dirname = path.resolve();
|
|
13
17
|
|
|
14
18
|
const packagePath = path.resolve(__dirname, '..', '..', 'package.json');
|