@scinorandex/sparse 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +41 -0
- package/AGENTS.md +31 -11
- package/README.md +283 -29
- package/dist/cli.js +113 -24
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts +3 -1
- package/dist/generator.js +29 -5
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.js +34 -1
- package/dist/index.js.map +1 -1
- package/dist/meta/common.d.ts +17 -0
- package/dist/meta/common.js +66 -1
- package/dist/meta/common.js.map +1 -1
- package/dist/meta/selfhosted.d.ts +4 -5
- package/dist/meta/selfhosted.js +49 -36
- package/dist/meta/selfhosted.js.map +1 -1
- package/dist/parser.d.ts +56 -35
- package/dist/parser.js +146 -18
- package/dist/parser.js.map +1 -1
- package/dist/table/selfhosted.d.ts +10 -1
- package/dist/table/selfhosted.js +32 -12
- package/dist/table/selfhosted.js.map +1 -1
- package/dist/table/validate.d.ts +17 -0
- package/dist/table/validate.js +84 -0
- package/dist/table/validate.js.map +1 -0
- package/dist/utils/Stack.d.ts +4 -0
- package/dist/utils/Stack.js +16 -1
- package/dist/utils/Stack.js.map +1 -1
- package/dist/utils/errorWindowBuilder.js +11 -11
- package/dist/utils/errorWindowBuilder.js.map +1 -1
- package/dist/utils/loadFiles.d.ts +8 -0
- package/dist/utils/loadFiles.js +47 -0
- package/dist/utils/loadFiles.js.map +1 -0
- package/dist/utils/reducers.d.ts +9 -0
- package/dist/utils/reducers.js +56 -0
- package/dist/utils/reducers.js.map +1 -0
- package/example/LoLang/example.ts +16 -15
- package/example/kleene-test/example.ts +35 -17
- package/example/math/example.ts +12 -7
- package/example/selfhosted/example.ts +30 -24
- package/opencode.json +1 -1
- package/package.json +2 -2
- package/src/cli.ts +132 -23
- package/src/generator.ts +49 -8
- package/src/index.ts +55 -3
- package/src/meta/common.ts +116 -0
- package/src/meta/selfhosted.ts +42 -11
- package/src/parser.ts +259 -49
- package/src/table/selfhosted.ts +48 -12
- package/src/table/validate.ts +143 -0
- package/src/utils/Stack.ts +22 -2
- package/src/utils/errorWindowBuilder.ts +15 -13
- package/src/utils/loadFiles.ts +54 -0
- package/src/utils/reducers.ts +93 -0
- package/test/cli.test.ts +144 -0
- package/test/codegen.test.ts +75 -0
- package/test/grammar.test.ts +243 -0
- package/test/helpers.ts +59 -0
- package/test/lalr.test.ts +114 -0
- package/test/parser.test.ts +392 -0
- package/test/table.test.ts +144 -0
- package/tsconfig.json +1 -1
- package/example/LoLang/table2.txt +0 -497
- package/example/complicated/grammar.txt +0 -37
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
import { Production } from "../meta/common";
|
|
1
2
|
import { TableState } from "../parser";
|
|
2
|
-
|
|
3
|
+
import { Result } from "../utils/Result";
|
|
4
|
+
import { TableFormatWarning } from "./validate";
|
|
5
|
+
export type BuildStatesOptions = {
|
|
6
|
+
productions?: Production[];
|
|
7
|
+
source?: string;
|
|
8
|
+
onWarning?: (warning: TableFormatWarning) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare const tryBuildStates: (table: string, options?: BuildStatesOptions) => Result<TableState[]>;
|
|
11
|
+
export declare const buildStates: (table: string, options?: BuildStatesOptions) => TableState[];
|
package/dist/table/selfhosted.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildStates = void 0;
|
|
3
|
+
exports.buildStates = exports.tryBuildStates = void 0;
|
|
4
|
+
const common_1 = require("../meta/common");
|
|
4
5
|
const selfhosted_1 = require("../meta/selfhosted");
|
|
5
6
|
const parser_1 = require("../parser");
|
|
6
7
|
const states_1 = require("./states");
|
|
8
|
+
const validate_1 = require("./validate");
|
|
7
9
|
class StateNode extends selfhosted_1.BaseNode {
|
|
8
10
|
constructor(items) {
|
|
9
11
|
super();
|
|
@@ -11,19 +13,21 @@ class StateNode extends selfhosted_1.BaseNode {
|
|
|
11
13
|
}
|
|
12
14
|
toTableState() {
|
|
13
15
|
const state = new parser_1.TableState();
|
|
14
|
-
for (const item of this.items.
|
|
16
|
+
for (const item of this.items.getItemsReversed()) {
|
|
15
17
|
const key = item.type === "terminal" ? `[${item.name.lexeme}]` : `<${item.name.lexeme}>`;
|
|
16
18
|
state.actions.set(key, item.action);
|
|
19
|
+
state.rawActions.set(key, item.rawAction);
|
|
17
20
|
}
|
|
18
21
|
return state;
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
class ItemNode extends selfhosted_1.BaseNode {
|
|
22
|
-
constructor(type, name, action) {
|
|
25
|
+
constructor(type, name, action, rawAction) {
|
|
23
26
|
super();
|
|
24
27
|
this.type = type;
|
|
25
28
|
this.name = name;
|
|
26
29
|
this.action = action;
|
|
30
|
+
this.rawAction = rawAction;
|
|
27
31
|
}
|
|
28
32
|
}
|
|
29
33
|
const reducers = {
|
|
@@ -45,21 +49,37 @@ const reducers = {
|
|
|
45
49
|
type: bag.action.lexeme.startsWith("s") ? "shift" : "reduce",
|
|
46
50
|
value: parseInt(bag.action.lexeme.substring(1)),
|
|
47
51
|
};
|
|
48
|
-
return new ItemNode("terminal", bag.name, action);
|
|
52
|
+
return new ItemNode("terminal", bag.name, action, bag.action.lexeme);
|
|
49
53
|
},
|
|
50
54
|
variable: (bag) => {
|
|
51
55
|
const action = { type: "goto", value: parseInt(bag.state.lexeme) };
|
|
52
|
-
return new ItemNode("variable", bag.name, action);
|
|
56
|
+
return new ItemNode("variable", bag.name, action, bag.state.lexeme);
|
|
53
57
|
},
|
|
54
58
|
};
|
|
55
|
-
const
|
|
56
|
-
const lexer = selfhosted_1.grammarLexerGenerator.generate(
|
|
59
|
+
const tryBuildStates = (table, options = {}) => {
|
|
60
|
+
const lexer = selfhosted_1.grammarLexerGenerator.generate(table, () => ({}));
|
|
57
61
|
const parserGenerator = (0, selfhosted_1.getSelfHostedParserGenerator)(states_1.selfhosted);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
let states;
|
|
63
|
+
try {
|
|
64
|
+
const parser = parserGenerator.generate(lexer, {
|
|
65
|
+
reducer: ({ bag, name }) => reducers[name !== null && name !== void 0 ? name : ""](bag),
|
|
66
|
+
});
|
|
67
|
+
states = parser.parse().result;
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err instanceof parser_1.LR1ParserGraveError && err.currentToken != null)
|
|
71
|
+
return { success: false, reason: err.reason, token: err.currentToken };
|
|
72
|
+
return { success: false, reason: (0, common_1.describeThrowable)(err), token: (0, common_1.syntheticGrammarToken)() };
|
|
73
|
+
}
|
|
74
|
+
const tableStates = states.getItemsReversed().map((state) => state.toTableState());
|
|
75
|
+
return (0, validate_1.validateTableStates)(tableStates, options);
|
|
76
|
+
};
|
|
77
|
+
exports.tryBuildStates = tryBuildStates;
|
|
78
|
+
const buildStates = (table, options = {}) => {
|
|
79
|
+
const result = (0, exports.tryBuildStates)(table, options);
|
|
80
|
+
if (result.success === false)
|
|
81
|
+
throw new Error(`Encountered error "${result.reason}" while parsing the parsing table at ${result.token.line}:${result.token.column}`);
|
|
82
|
+
return result.value;
|
|
63
83
|
};
|
|
64
84
|
exports.buildStates = buildStates;
|
|
65
85
|
//# sourceMappingURL=selfhosted.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selfhosted.js","sourceRoot":"","sources":["../../src/table/selfhosted.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"selfhosted.js","sourceRoot":"","sources":["../../src/table/selfhosted.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Production } from "../meta/common";
|
|
2
|
+
import type { TableState } from "../parser";
|
|
3
|
+
import { Result } from "../utils/Result";
|
|
4
|
+
export type TableFormatWarning = {
|
|
5
|
+
reason: string;
|
|
6
|
+
stateIndex: number;
|
|
7
|
+
};
|
|
8
|
+
export type ValidateTableStatesOptions = {
|
|
9
|
+
productions?: Production[];
|
|
10
|
+
source?: string;
|
|
11
|
+
onWarning?: (warning: TableFormatWarning) => void;
|
|
12
|
+
};
|
|
13
|
+
export declare const validateTableStates: (states: TableState[], options?: ValidateTableStatesOptions) => Result<TableState[]>;
|
|
14
|
+
export type ValidateTableOptions = {
|
|
15
|
+
source?: string;
|
|
16
|
+
};
|
|
17
|
+
export declare const validateTable: (productions: Production[], states: TableState[], options?: ValidateTableOptions) => Result<TableState[]>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateTable = exports.validateTableStates = void 0;
|
|
4
|
+
const common_1 = require("../meta/common");
|
|
5
|
+
const SHIFT_REDUCE_RE = /^([sr])(\d+)$/;
|
|
6
|
+
const GOTO_RE = /^(\d+)$/;
|
|
7
|
+
const defaultRawAction = (action) => `${action.type === "goto" ? "" : action.type === "shift" ? "s" : "r"}${action.value}`;
|
|
8
|
+
;
|
|
9
|
+
const STATE_NAME_PATTERN = /^(\[[^\]]+\]|<[^>]+>)$/;
|
|
10
|
+
const validateTableStates = (states, options = {}) => {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
const { productions, source } = options;
|
|
13
|
+
const suffix = source == null ? "" : ` in ${source}`;
|
|
14
|
+
const stateCount = states.length;
|
|
15
|
+
const fail = (reason, stateIndex) => ({
|
|
16
|
+
success: false,
|
|
17
|
+
reason: `${reason}${suffix}`,
|
|
18
|
+
token: tokenFor(stateIndex, productions),
|
|
19
|
+
});
|
|
20
|
+
if (stateCount === 0)
|
|
21
|
+
return {
|
|
22
|
+
success: false,
|
|
23
|
+
reason: `The parsing table${suffix} does not contain any states`,
|
|
24
|
+
token: (0, common_1.syntheticGrammarToken)(),
|
|
25
|
+
};
|
|
26
|
+
for (let stateIndex = 0; stateIndex < stateCount; stateIndex++) {
|
|
27
|
+
const state = states[stateIndex];
|
|
28
|
+
if (state == null)
|
|
29
|
+
return fail(`State ${stateIndex} is missing`, stateIndex);
|
|
30
|
+
if (stateIndex === 0 && state.actions.size === 0)
|
|
31
|
+
return fail("State 0 has no actions, so the parser cannot read the first token", stateIndex);
|
|
32
|
+
for (const [key, action] of state.actions.entries()) {
|
|
33
|
+
const nameMatch = STATE_NAME_PATTERN.exec(key);
|
|
34
|
+
if (nameMatch == null)
|
|
35
|
+
return fail(`State ${stateIndex} has the entry "${key}", which is neither a terminal "[NAME]" nor a variable "<NAME>"`, stateIndex);
|
|
36
|
+
const isVariable = nameMatch[1].startsWith("<");
|
|
37
|
+
if (isVariable !== (action.type === "goto"))
|
|
38
|
+
return fail(`State ${stateIndex} maps the variable "${key}" to a "${action.type}" action, but variables can only be reached by a "goto" action`, stateIndex);
|
|
39
|
+
const raw = (_a = state.rawActions.get(key)) !== null && _a !== void 0 ? _a : defaultRawAction(action);
|
|
40
|
+
const expected = isVariable ? GOTO_RE : SHIFT_REDUCE_RE;
|
|
41
|
+
if (expected.test(raw) === false || Number.isInteger(action.value) === false)
|
|
42
|
+
return fail(`State ${stateIndex} has the action "${key}=${raw}" for ${isVariable ? "a variable" : "a terminal"}, but it should be ${isVariable ? "a state number" : '"sN" (shift) or "rN" (reduce)'}`, stateIndex);
|
|
43
|
+
if (isVariable || action.type === "shift") {
|
|
44
|
+
if (action.value >= stateCount)
|
|
45
|
+
return fail(`State ${stateIndex} sends "${key}" to state ${action.value}, but the table only has ${stateCount} states (0 to ${stateCount - 1})`, stateIndex);
|
|
46
|
+
}
|
|
47
|
+
else if (productions != null && action.value >= productions.length)
|
|
48
|
+
return fail(`State ${stateIndex} reduces "${key}" by production ${action.value}, but the grammar only has ${productions.length} productions (0 to ${productions.length - 1}). Is the table stale?`, stateIndex);
|
|
49
|
+
}
|
|
50
|
+
const shiftTargets = new Set();
|
|
51
|
+
for (const action of state.actions.values()) {
|
|
52
|
+
if (action.type !== "shift")
|
|
53
|
+
continue;
|
|
54
|
+
if (shiftTargets.has(action.value))
|
|
55
|
+
(_b = options.onWarning) === null || _b === void 0 ? void 0 : _b.call(options, {
|
|
56
|
+
reason: `State ${stateIndex} has two terminals that shift to state ${action.value}`,
|
|
57
|
+
stateIndex,
|
|
58
|
+
});
|
|
59
|
+
shiftTargets.add(action.value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { success: true, value: states };
|
|
63
|
+
};
|
|
64
|
+
exports.validateTableStates = validateTableStates;
|
|
65
|
+
const validateTable = (productions, states, options = {}) => {
|
|
66
|
+
const statesResult = (0, exports.validateTableStates)(states, Object.assign(Object.assign({}, options), { productions }));
|
|
67
|
+
if (statesResult.success === false)
|
|
68
|
+
return statesResult;
|
|
69
|
+
const suffix = options.source == null ? "" : ` in ${options.source}`;
|
|
70
|
+
if (productions.length === 0)
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
reason: `The grammar${suffix} does not contain any productions, so the table cannot belong to it`,
|
|
74
|
+
token: (0, common_1.syntheticGrammarToken)(),
|
|
75
|
+
};
|
|
76
|
+
return { success: true, value: states };
|
|
77
|
+
};
|
|
78
|
+
exports.validateTable = validateTable;
|
|
79
|
+
const tokenFor = (stateIndex, productions) => {
|
|
80
|
+
if (productions != null && productions.length > 0)
|
|
81
|
+
return productions[Math.min(stateIndex, productions.length - 1)].lhs;
|
|
82
|
+
return (0, common_1.syntheticGrammarToken)();
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/table/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/Stack.d.ts
CHANGED
package/dist/utils/Stack.js
CHANGED
|
@@ -17,9 +17,24 @@ class Stack {
|
|
|
17
17
|
throw new Error("Stack is empty");
|
|
18
18
|
return ret;
|
|
19
19
|
}
|
|
20
|
+
peekAt(depth) {
|
|
21
|
+
const ret = this.items[this.items.length - 1 - depth];
|
|
22
|
+
if (ret === undefined)
|
|
23
|
+
throw new Error(`Stack does not have an item at depth ${depth}`);
|
|
24
|
+
return ret;
|
|
25
|
+
}
|
|
26
|
+
get size() {
|
|
27
|
+
return this.items.length;
|
|
28
|
+
}
|
|
29
|
+
get isEmpty() {
|
|
30
|
+
return this.items.length === 0;
|
|
31
|
+
}
|
|
32
|
+
toArray() {
|
|
33
|
+
return [...this.items];
|
|
34
|
+
}
|
|
20
35
|
constructor(items = []) {
|
|
21
36
|
this.items = [];
|
|
22
|
-
this.items = items;
|
|
37
|
+
this.items = [...items];
|
|
23
38
|
}
|
|
24
39
|
}
|
|
25
40
|
exports.Stack = Stack;
|
package/dist/utils/Stack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/utils/Stack.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAGT,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAEM,GAAG;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,IAAI;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,YAAY,QAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/utils/Stack.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAGT,IAAI,CAAC,IAAO;QACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAEM,GAAG;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,IAAI;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9C,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC;IAGM,MAAM,CAAC,KAAa;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACtD,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC;QACxF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;IAGM,OAAO;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,YAAY,QAAa,EAAE;QAtCnB,UAAK,GAAQ,EAAE,CAAC;QAuCtB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,CAAC;CACF;AA1CD,sBA0CC"}
|
|
@@ -3,17 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.buildErrorWindow = void 0;
|
|
4
4
|
const buildErrorWindow = (file, token) => {
|
|
5
5
|
const lines = file.split("\n");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (
|
|
16
|
-
window += `${(token.line + 1)
|
|
6
|
+
const lineNumberWidth = `${token.line}`.length;
|
|
7
|
+
const gutter = (line) => `${`${line}`.padStart(lineNumberWidth)} | `;
|
|
8
|
+
const sourceLine = lines[token.line - 1];
|
|
9
|
+
const nextLine = lines[token.line];
|
|
10
|
+
const pointerColumn = Math.max(0, Math.min(token.column, sourceLine === undefined ? 0 : sourceLine.length));
|
|
11
|
+
const pointerLength = Math.max(1, Math.min(token.lexeme === "" ? 1 : token.lexeme.length, sourceLine === undefined ? 1 : sourceLine.length - pointerColumn));
|
|
12
|
+
const pointer = `${" ".repeat(pointerColumn)}${"~".repeat(pointerLength)}`;
|
|
13
|
+
let window = `${gutter(token.line)}${sourceLine !== null && sourceLine !== void 0 ? sourceLine : "<end of file>"}\n`;
|
|
14
|
+
window += `${" ".repeat(lineNumberWidth)} | ${pointer}\n`;
|
|
15
|
+
if (nextLine !== undefined)
|
|
16
|
+
window += `${gutter(token.line + 1)}${nextLine}\n`;
|
|
17
17
|
return window;
|
|
18
18
|
};
|
|
19
19
|
exports.buildErrorWindow = buildErrorWindow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorWindowBuilder.js","sourceRoot":"","sources":["../../src/utils/errorWindowBuilder.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"errorWindowBuilder.js","sourceRoot":"","sources":["../../src/utils/errorWindowBuilder.ts"],"names":[],"mappings":";;;AAMO,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,KAAmB,EAAE,EAAE;IACpE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,eAAe,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;IAE7E,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5G,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;IAC7J,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAE3E,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,eAAe,IAAI,CAAC;IACvE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,OAAO,IAAI,CAAC;IAE1D,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;IAE/E,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAlBW,QAAA,gBAAgB,oBAkB3B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Production, ValidateProductionsOptions } from "../meta/common";
|
|
2
|
+
import { Result } from "./Result";
|
|
3
|
+
import { BuildStatesOptions } from "../table/selfhosted";
|
|
4
|
+
import type { TableState } from "../parser";
|
|
5
|
+
export type LoadGrammarOptions = ValidateProductionsOptions;
|
|
6
|
+
export declare const loadGrammar: (grammarPath: string, options?: LoadGrammarOptions) => Promise<Result<Production[]>>;
|
|
7
|
+
export type LoadTableOptions = Omit<BuildStatesOptions, "source">;
|
|
8
|
+
export declare const loadTable: (tablePath: string, options?: LoadTableOptions) => Promise<Result<TableState[]>>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadTable = exports.loadGrammar = void 0;
|
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
8
|
+
const common_1 = require("../meta/common");
|
|
9
|
+
const selfhosted_1 = require("../table/selfhosted");
|
|
10
|
+
const selfhosted_2 = require("../meta/selfhosted");
|
|
11
|
+
const loadGrammar = async (grammarPath, options = {}) => {
|
|
12
|
+
let source;
|
|
13
|
+
try {
|
|
14
|
+
source = await promises_1.default.readFile(grammarPath, "utf8");
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
return {
|
|
18
|
+
success: false,
|
|
19
|
+
reason: `Could not read the grammar file: ${err instanceof Error ? err.message : String(err)}`,
|
|
20
|
+
token: (0, common_1.syntheticGrammarToken)(),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const result = (0, selfhosted_2.tryBuildProductions)(source, options);
|
|
24
|
+
if (result.success === false)
|
|
25
|
+
return Object.assign(Object.assign({}, result), { reason: `${result.reason} (in ${grammarPath})` });
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
exports.loadGrammar = loadGrammar;
|
|
29
|
+
const loadTable = async (tablePath, options = {}) => {
|
|
30
|
+
let source;
|
|
31
|
+
try {
|
|
32
|
+
source = await promises_1.default.readFile(tablePath, "utf8");
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
reason: `Could not read the parsing table file: ${err instanceof Error ? err.message : String(err)}`,
|
|
38
|
+
token: (0, common_1.syntheticGrammarToken)(),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const result = (0, selfhosted_1.tryBuildStates)(source, Object.assign(Object.assign({}, options), { source: tablePath }));
|
|
42
|
+
if (result.success === false)
|
|
43
|
+
return Object.assign(Object.assign({}, result), { reason: `${result.reason} (in ${tablePath})` });
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
exports.loadTable = loadTable;
|
|
47
|
+
//# sourceMappingURL=loadFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadFiles.js","sourceRoot":"","sources":["../../src/utils/loadFiles.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA6B;AAC7B,2CAA+F;AAE/F,oDAAyE;AACzE,mDAAyD;AAMlD,MAAM,WAAW,GAAG,KAAK,EAC9B,WAAmB,EACnB,UAA8B,EAAE,EACD,EAAE;IACjC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC9F,KAAK,EAAE,IAAA,8BAAqB,GAAE;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gCAAmB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAC1B,uCAAY,MAAM,KAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,QAAQ,WAAW,GAAG,IAAG;IACvE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAnBW,QAAA,WAAW,eAmBtB;AAKK,MAAM,SAAS,GAAG,KAAK,EAC5B,SAAiB,EACjB,UAA4B,EAAE,EACC,EAAE;IACjC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACpG,KAAK,EAAE,IAAA,8BAAqB,GAAE;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,2BAAc,EAAC,MAAM,kCAAO,OAAO,KAAE,MAAM,EAAE,SAAS,IAAG,CAAC;IACzE,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAC1B,uCAAY,MAAM,KAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,QAAQ,SAAS,GAAG,IAAG;IACrE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAnBW,QAAA,SAAS,aAmBpB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Production } from "../meta/common";
|
|
2
|
+
export declare const KLEENE_REDUCER_NAME = "autogenerated-kleene";
|
|
3
|
+
export declare const namedProductions: (productions: Production[]) => string[];
|
|
4
|
+
export declare const missingReducerNames: (productions: Production[], reducers: Record<string, unknown>) => string[];
|
|
5
|
+
export declare const missingReducerMessage: (productions: Production[], reducers: Record<string, unknown>) => string;
|
|
6
|
+
export type ReducerMap<Node> = Record<string, (newInput: any, oldInput: any) => Node>;
|
|
7
|
+
export declare const defineReducers: <Reducers extends Record<string, (...args: never[]) => unknown>>(reducers: Reducers) => (newInput: any, oldInput: any) => any;
|
|
8
|
+
export declare const assertReducersCoverGrammar: (productions: Production[], reducers: ReducerMap<unknown>) => void;
|
|
9
|
+
export declare const enumToString: <TokenType = unknown>(tokenTypes: object) => (tokenType: TokenType) => string;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enumToString = exports.assertReducersCoverGrammar = exports.defineReducers = exports.missingReducerMessage = exports.missingReducerNames = exports.namedProductions = exports.KLEENE_REDUCER_NAME = void 0;
|
|
4
|
+
exports.KLEENE_REDUCER_NAME = "autogenerated-kleene";
|
|
5
|
+
const namedProductions = (productions) => {
|
|
6
|
+
const names = new Set();
|
|
7
|
+
for (const production of productions)
|
|
8
|
+
if (production.name != null)
|
|
9
|
+
names.add(production.name);
|
|
10
|
+
return [...names].sort();
|
|
11
|
+
};
|
|
12
|
+
exports.namedProductions = namedProductions;
|
|
13
|
+
const missingReducerNames = (productions, reducers) => (0, exports.namedProductions)(productions).filter((name) => reducers[name] == null);
|
|
14
|
+
exports.missingReducerNames = missingReducerNames;
|
|
15
|
+
const describeKleene = (productions) => {
|
|
16
|
+
const needed = productions.filter((production) => production.name === exports.KLEENE_REDUCER_NAME ||
|
|
17
|
+
production.identifier.startsWith("<autogen-"));
|
|
18
|
+
if (needed.length === 0)
|
|
19
|
+
return "";
|
|
20
|
+
return `\nNote: this grammar uses "*" or "+", so it has ${needed.length} autogenerated list production(s) named "${exports.KLEENE_REDUCER_NAME}". That reducer has to flatten the list it is handed (see README, "Repetition with * and +").`;
|
|
21
|
+
};
|
|
22
|
+
const missingReducerMessage = (productions, reducers) => {
|
|
23
|
+
const missing = (0, exports.missingReducerNames)(productions, reducers);
|
|
24
|
+
if (missing.length === 0)
|
|
25
|
+
return "";
|
|
26
|
+
const has = (0, exports.namedProductions)(productions).filter((name) => reducers[name] != null);
|
|
27
|
+
const kleene = missing.includes(exports.KLEENE_REDUCER_NAME) ? describeKleene(productions) : "";
|
|
28
|
+
return (`No reducer for ${missing.length === 1 ? "production" : "productions"} ${missing
|
|
29
|
+
.map((name) => `"${name}"`)
|
|
30
|
+
.join(", ")}.` +
|
|
31
|
+
`\nReducers are keyed by the name given in the grammar, e.g. "<PROGRAM: program>" is reduced by reducers.program.` +
|
|
32
|
+
(has.length === 0 ? "\nYour reducer map is empty." : `\nYou have reducers for: ${has.join(", ")}.`) +
|
|
33
|
+
kleene);
|
|
34
|
+
};
|
|
35
|
+
exports.missingReducerMessage = missingReducerMessage;
|
|
36
|
+
const defineReducers = (reducers) => function sparseReducer(newInput, oldInput) {
|
|
37
|
+
const name = newInput === null || newInput === void 0 ? void 0 : newInput.name;
|
|
38
|
+
const lookup = reducers;
|
|
39
|
+
const reducer = name == null ? undefined : lookup[name];
|
|
40
|
+
if (reducer == null)
|
|
41
|
+
throw new Error(`No reducer for production "${name !== null && name !== void 0 ? name : ""}" (production ${oldInput === null || oldInput === void 0 ? void 0 : oldInput.index}). Reducers are keyed by the name given in the grammar.`);
|
|
42
|
+
return reducer(newInput, oldInput);
|
|
43
|
+
};
|
|
44
|
+
exports.defineReducers = defineReducers;
|
|
45
|
+
const assertReducersCoverGrammar = (productions, reducers) => {
|
|
46
|
+
const message = (0, exports.missingReducerMessage)(productions, reducers);
|
|
47
|
+
if (message !== "")
|
|
48
|
+
throw new Error(message);
|
|
49
|
+
};
|
|
50
|
+
exports.assertReducersCoverGrammar = assertReducersCoverGrammar;
|
|
51
|
+
const enumToString = (tokenTypes) => (tokenType) => {
|
|
52
|
+
const name = tokenTypes[tokenType];
|
|
53
|
+
return `${name !== null && name !== void 0 ? name : tokenType}`;
|
|
54
|
+
};
|
|
55
|
+
exports.enumToString = enumToString;
|
|
56
|
+
//# sourceMappingURL=reducers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducers.js","sourceRoot":"","sources":["../../src/utils/reducers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import fs from "fs/promises";
|
|
2
|
-
import {
|
|
2
|
+
import { LR1StackSymbol, Sparse, buildProductions, buildStates } from "../../src/index";
|
|
3
3
|
import { ColumnAndRow, Slex, Token } from "@scinorandex/slex";
|
|
4
4
|
|
|
5
5
|
// prettier-ignore
|
|
6
|
-
enum LoLangTokenType {
|
|
6
|
+
export enum LoLangTokenType {
|
|
7
7
|
EOF,
|
|
8
8
|
|
|
9
9
|
IMPORT,
|
|
@@ -42,7 +42,7 @@ enum LoLangTokenType {
|
|
|
42
42
|
SINGLE_LINE_COMMENT, MULTI_LINE_COMMENT
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
const lexerGenerator = new Slex<LoLangTokenType, {}>({
|
|
45
|
+
export const lexerGenerator = new Slex<LoLangTokenType, {}>({
|
|
46
46
|
EOF_TYPE: LoLangTokenType.EOF,
|
|
47
47
|
isHigherPrecedence: ({ current, next }) => current === LoLangTokenType.IDENTIFIER,
|
|
48
48
|
// Specifies that SINGLE_LINE_COMMENT and MULTI_LINE_COMMENT tokens should be ignored.
|
|
@@ -176,7 +176,7 @@ async function parse(tablePath: string) {
|
|
|
176
176
|
|
|
177
177
|
const parser = parserGenerator.generate(lexer, {
|
|
178
178
|
reducer: (_, { input }) => new Node(input),
|
|
179
|
-
recover({ lexer, statesStack, symbolsStack, isSafe, addError, crash, finish, states }) {
|
|
179
|
+
recover({ lexer, statesStack, symbolsStack, isSafe, addError, crash, finish, insertToken, states }) {
|
|
180
180
|
let token = lexer.peekNextToken();
|
|
181
181
|
const currentState = statesStack.peek();
|
|
182
182
|
|
|
@@ -189,25 +189,26 @@ async function parse(tablePath: string) {
|
|
|
189
189
|
token = lexer.peekNextToken();
|
|
190
190
|
|
|
191
191
|
// check for lacking semicolons
|
|
192
|
-
|
|
193
|
-
|
|
192
|
+
const semicolonAction = states[currentState].getTerminalAction("SEMICOLON");
|
|
193
|
+
if (semicolonAction != null) {
|
|
194
|
+
// A semicolon the author forgot. It gets the same position as the token we choked on.
|
|
194
195
|
const newToken = new Token<LoLangTokenType, {}>(
|
|
195
196
|
LoLangTokenType.SEMICOLON,
|
|
196
197
|
";",
|
|
197
|
-
new ColumnAndRow(token.
|
|
198
|
+
new ColumnAndRow(token.line, token.column),
|
|
198
199
|
token.metadata,
|
|
199
200
|
);
|
|
200
201
|
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
// If the parser only wanted a semicolon to reduce, hand it back as the next token.
|
|
203
|
+
if (semicolonAction.type === "reduce") return finish({ newToken });
|
|
203
204
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
`Expected SEMICOLON but received ${LoLangTokenType[token.type]}. SEMICOLON was automatically inserted.`,
|
|
208
|
-
);
|
|
209
|
-
}
|
|
205
|
+
// Otherwise shift the synthesized semicolon onto the stacks and carry on from there.
|
|
206
|
+
const inserted = insertToken(newToken);
|
|
207
|
+
if (inserted != null) return crash(inserted.reason);
|
|
210
208
|
|
|
209
|
+
addError(
|
|
210
|
+
`Expected SEMICOLON but received ${LoLangTokenType[token.type]}. SEMICOLON was automatically inserted.`,
|
|
211
|
+
);
|
|
211
212
|
if (isSafe()) return finish();
|
|
212
213
|
}
|
|
213
214
|
|