@scinorandex/sparse 0.0.8 → 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 +60 -0
- package/README.md +286 -30
- package/dist/cli.js +113 -24
- package/dist/cli.js.map +1 -1
- package/dist/generator.d.ts +9 -2
- package/dist/generator.js +179 -50
- package/dist/generator.js.map +1 -1
- package/dist/index.d.ts +17 -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 +51 -38
- package/dist/meta/selfhosted.js.map +1 -1
- package/dist/parser.d.ts +56 -33
- 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 +42 -18
- package/example/LoLang/tablelalr.txt +381 -0
- 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 +18 -0
- package/package.json +9 -3
- package/src/cli.ts +132 -23
- package/src/generator.ts +237 -67
- package/src/index.ts +56 -3
- package/src/meta/common.ts +116 -0
- package/src/meta/selfhosted.ts +42 -11
- package/src/parser.ts +259 -47
- 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/complicated/grammar.txt +0 -37
package/dist/parser.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LR1ParserGraveError = exports.Sparse = exports.TableState = void 0;
|
|
3
|
+
exports.SparseGrammarError = exports.LR1ParserGraveError = exports.LR1Parser = exports.Sparse = exports.TableState = void 0;
|
|
4
4
|
const generator_1 = require("./generator");
|
|
5
5
|
const Stack_1 = require("./utils/Stack");
|
|
6
|
+
const loadFiles_1 = require("./utils/loadFiles");
|
|
7
|
+
const validate_1 = require("./table/validate");
|
|
6
8
|
class TableState {
|
|
7
|
-
constructor(actions = new Map()) {
|
|
9
|
+
constructor(actions = new Map(), rawActions = new Map()) {
|
|
8
10
|
this.actions = actions;
|
|
11
|
+
this.rawActions = rawActions;
|
|
9
12
|
}
|
|
10
13
|
getTerminalAction(terminal) {
|
|
11
14
|
return this.actions.get(`[${terminal}]`);
|
|
@@ -13,20 +16,48 @@ class TableState {
|
|
|
13
16
|
getVariableAction(variable) {
|
|
14
17
|
return this.actions.get(variable);
|
|
15
18
|
}
|
|
19
|
+
getTerminalKeys() {
|
|
20
|
+
return this.getKeys("[", "]");
|
|
21
|
+
}
|
|
22
|
+
getVariableKeys() {
|
|
23
|
+
return this.getKeys("<", ">");
|
|
24
|
+
}
|
|
25
|
+
getKeys(prefix, suffix) {
|
|
26
|
+
const keys = [];
|
|
27
|
+
for (const key of this.actions.keys())
|
|
28
|
+
if (key.startsWith(prefix) && key.endsWith(suffix))
|
|
29
|
+
keys.push(key.substring(prefix.length, key.length - suffix.length));
|
|
30
|
+
return keys.sort();
|
|
31
|
+
}
|
|
16
32
|
toJSObject() {
|
|
17
33
|
return Object.fromEntries(this.actions);
|
|
18
34
|
}
|
|
19
35
|
static fromJSObject(json) {
|
|
20
|
-
|
|
36
|
+
const actions = new Map(Object.entries(json));
|
|
37
|
+
const rawActions = new Map([...actions].map(([key, action]) => [
|
|
38
|
+
key,
|
|
39
|
+
action.type === "goto" ? `${action.value}` : `${action.type === "shift" ? "s" : "r"}${action.value}`,
|
|
40
|
+
]));
|
|
41
|
+
return new TableState(actions, rawActions);
|
|
21
42
|
}
|
|
22
43
|
}
|
|
23
44
|
exports.TableState = TableState;
|
|
24
45
|
class Sparse {
|
|
25
46
|
constructor(options) {
|
|
26
47
|
this.options = options;
|
|
48
|
+
if (options.validate === true) {
|
|
49
|
+
const result = (0, validate_1.validateTable)(options.productions, options.states, { source: options.source });
|
|
50
|
+
if (result.success === false)
|
|
51
|
+
throw new Error(`The parsing table does not match the grammar: ${result.reason}`);
|
|
52
|
+
}
|
|
27
53
|
}
|
|
28
54
|
static tryFromProductions(options) {
|
|
29
|
-
const
|
|
55
|
+
const startedAt = Date.now();
|
|
56
|
+
const statesResult = (0, generator_1.generateStates)(options.productions, {
|
|
57
|
+
mode: options.mode,
|
|
58
|
+
onWarning: options.onWarning,
|
|
59
|
+
onProgress: options.onProgress,
|
|
60
|
+
});
|
|
30
61
|
if (statesResult.success === false)
|
|
31
62
|
return statesResult;
|
|
32
63
|
const states = statesResult.value;
|
|
@@ -35,12 +66,47 @@ class Sparse {
|
|
|
35
66
|
states: states.toStates(),
|
|
36
67
|
toStringifiedTokenType: options.toStringifiedTokenType,
|
|
37
68
|
});
|
|
69
|
+
if (options.quiet !== true) {
|
|
70
|
+
const elapsed = Date.now() - startedAt;
|
|
71
|
+
const label = options.mode === "lalr1" ? "LALR(1)" : "LR(1)";
|
|
72
|
+
console.error(`Sparse generated ${sparse.options.states.length} ${label} states in ${elapsed}ms`);
|
|
73
|
+
}
|
|
38
74
|
return { success: true, value: sparse };
|
|
39
75
|
}
|
|
40
76
|
static fromProductions(options) {
|
|
41
77
|
const result = Sparse.tryFromProductions(options);
|
|
42
78
|
if (result.success === false)
|
|
43
|
-
throw new
|
|
79
|
+
throw new SparseGrammarError(result.reason, result.token);
|
|
80
|
+
return result.value;
|
|
81
|
+
}
|
|
82
|
+
static async tryFromGrammarFile(options) {
|
|
83
|
+
const productionsResult = await (0, loadFiles_1.loadGrammar)(options.grammarPath, { onWarning: options.onWarning });
|
|
84
|
+
if (productionsResult.success === false)
|
|
85
|
+
return productionsResult;
|
|
86
|
+
const statesResult = await (0, loadFiles_1.loadTable)(options.tablePath, { productions: productionsResult.value });
|
|
87
|
+
if (statesResult.success === false)
|
|
88
|
+
return statesResult;
|
|
89
|
+
if (options.validate !== false) {
|
|
90
|
+
const tableResult = (0, validate_1.validateTable)(productionsResult.value, statesResult.value, {
|
|
91
|
+
source: options.tablePath,
|
|
92
|
+
});
|
|
93
|
+
if (tableResult.success === false)
|
|
94
|
+
return tableResult;
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
success: true,
|
|
98
|
+
value: new Sparse({
|
|
99
|
+
productions: productionsResult.value,
|
|
100
|
+
states: statesResult.value,
|
|
101
|
+
toStringifiedTokenType: options.toStringifiedTokenType,
|
|
102
|
+
source: options.grammarPath,
|
|
103
|
+
}),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
static async fromGrammarFile(options) {
|
|
107
|
+
const result = await Sparse.tryFromGrammarFile(options);
|
|
108
|
+
if (result.success === false)
|
|
109
|
+
throw new SparseGrammarError(result.reason, result.token);
|
|
44
110
|
return result.value;
|
|
45
111
|
}
|
|
46
112
|
generate(lexer, options) {
|
|
@@ -59,16 +125,29 @@ class LR1Parser {
|
|
|
59
125
|
this.symbolsStack = new Stack_1.Stack();
|
|
60
126
|
this.exceptions = [];
|
|
61
127
|
}
|
|
128
|
+
reset() {
|
|
129
|
+
this.statesStack = new Stack_1.Stack([0]);
|
|
130
|
+
this.symbolsStack = new Stack_1.Stack();
|
|
131
|
+
this.exceptions = [];
|
|
132
|
+
}
|
|
62
133
|
parse() {
|
|
63
134
|
var _a;
|
|
64
135
|
const { productions, states, toStringifiedTokenType } = this.options;
|
|
136
|
+
if (states.length === 0)
|
|
137
|
+
throw new LR1ParserGraveError("The parsing table is empty, so no token can be parsed", null);
|
|
138
|
+
const currentStates = () => {
|
|
139
|
+
const state = states[this.statesStack.peek()];
|
|
140
|
+
if (state == null)
|
|
141
|
+
throw new LR1ParserGraveError(`The parsing table is out of sync with the grammar: state ${this.statesStack.peek()} does not exist (the table has ${states.length} states)`, null);
|
|
142
|
+
return state;
|
|
143
|
+
};
|
|
65
144
|
while (true) {
|
|
66
|
-
let currentState =
|
|
145
|
+
let currentState = currentStates();
|
|
67
146
|
let token = this.lexer.peekNextToken();
|
|
68
|
-
let action =
|
|
147
|
+
let action = currentState.getTerminalAction(toStringifiedTokenType(token.type));
|
|
69
148
|
if (action == null) {
|
|
70
149
|
if (this.recover === null)
|
|
71
|
-
throw new LR1ParserGraveError(
|
|
150
|
+
throw new LR1ParserGraveError(this.syntaxErrorMessage(currentState, token), token);
|
|
72
151
|
const recoveryResult = this.recover({
|
|
73
152
|
lexer: this.lexer,
|
|
74
153
|
states,
|
|
@@ -77,24 +156,29 @@ class LR1Parser {
|
|
|
77
156
|
addError: (reason) => this.exceptions.push({ message: reason, token: this.lexer.peekNextToken() }),
|
|
78
157
|
crash: (reason) => ({ success: false, reason }),
|
|
79
158
|
finish: (options) => ({ success: true, token: options === null || options === void 0 ? void 0 : options.newToken }),
|
|
80
|
-
|
|
159
|
+
insertToken: (newToken) => this.insertToken(newToken),
|
|
160
|
+
isSafe: () => currentStates().actions.has(`[${toStringifiedTokenType(this.lexer.peekNextToken().type)}]`),
|
|
81
161
|
});
|
|
82
162
|
if (recoveryResult.success === false)
|
|
83
163
|
throw new LR1ParserGraveError(recoveryResult.reason, token);
|
|
84
164
|
token = (_a = recoveryResult.token) !== null && _a !== void 0 ? _a : this.lexer.peekNextToken();
|
|
85
|
-
currentState =
|
|
86
|
-
action =
|
|
165
|
+
currentState = currentStates();
|
|
166
|
+
action = currentState.getTerminalAction(toStringifiedTokenType(token.type));
|
|
167
|
+
if (action == null)
|
|
168
|
+
throw new LR1ParserGraveError(this.syntaxErrorMessage(currentState, token), token);
|
|
87
169
|
}
|
|
88
170
|
const fixedAction = action;
|
|
89
171
|
if (fixedAction.type === "shift") {
|
|
90
172
|
token = this.lexer.getNextToken();
|
|
91
|
-
this.
|
|
173
|
+
this.pushState(fixedAction.value);
|
|
92
174
|
this.symbolsStack.push({ type: "token", token: token });
|
|
93
175
|
}
|
|
94
176
|
else if (fixedAction.type === "reduce") {
|
|
95
177
|
if (fixedAction.value === 0)
|
|
96
178
|
break;
|
|
97
179
|
const production = productions[fixedAction.value];
|
|
180
|
+
if (production == null)
|
|
181
|
+
throw new LR1ParserGraveError(`The parsing table is out of sync with the grammar: it reduces by production ${fixedAction.value}, but the grammar only has ${productions.length} productions`, token);
|
|
98
182
|
const popped = [];
|
|
99
183
|
for (let i = 0; i < production.rhs.length; i++) {
|
|
100
184
|
popped.unshift(this.symbolsStack.pop());
|
|
@@ -115,29 +199,73 @@ class LR1Parser {
|
|
|
115
199
|
this.symbolsStack.push({ type: "node", node });
|
|
116
200
|
}
|
|
117
201
|
catch (err) {
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
throw new LR1ParserGraveError(`Error while performing reduction for production
|
|
202
|
+
const cause = err instanceof Error ? err.message : String(err);
|
|
203
|
+
const input = truncate(JSON.stringify(popped), 500);
|
|
204
|
+
throw new LR1ParserGraveError(`Error while performing the reduction for production ${productionIndex}${describeProduction(production)}: ${cause}\nReduction input: ${input}`, token, err instanceof Error ? err : undefined);
|
|
121
205
|
}
|
|
122
206
|
const topNode = this.statesStack.peek();
|
|
123
|
-
const gotoAction =
|
|
207
|
+
const gotoAction = currentStates().getVariableAction(production.identifier);
|
|
124
208
|
if (gotoAction == undefined)
|
|
125
209
|
throw new LR1ParserGraveError(`No GOTO action for for state: ${topNode} and production: ${production.identifier}. Actions: Reduce by production ${productionIndex}`, token);
|
|
126
210
|
else if (gotoAction.type !== "goto")
|
|
127
211
|
throw new LR1ParserGraveError(`Expected GOTO action for state: ${topNode} and production: ${production.identifier}. Actions: Reduce by production ${productionIndex}. Received: ${gotoAction.type}`, token);
|
|
128
|
-
this.
|
|
212
|
+
this.pushState(gotoAction.value);
|
|
129
213
|
}
|
|
130
214
|
}
|
|
215
|
+
if (this.symbolsStack.isEmpty)
|
|
216
|
+
return { result: null, errors: this.exceptions };
|
|
131
217
|
const top = this.symbolsStack.peek();
|
|
132
218
|
return { result: top.type === "node" ? top.node : null, errors: this.exceptions };
|
|
133
219
|
}
|
|
220
|
+
pushState(state) {
|
|
221
|
+
if (state === undefined || this.options.states[state] == null)
|
|
222
|
+
throw new LR1ParserGraveError(`The parsing table is out of sync with the grammar: it points at state ${state}, but the table only has ${this.options.states.length} states`, null);
|
|
223
|
+
this.statesStack.push(state);
|
|
224
|
+
}
|
|
225
|
+
insertToken(token) {
|
|
226
|
+
var _a;
|
|
227
|
+
const state = this.options.states[this.statesStack.peek()];
|
|
228
|
+
const action = state === null || state === void 0 ? void 0 : state.getTerminalAction(this.options.toStringifiedTokenType(token.type));
|
|
229
|
+
if (action == null)
|
|
230
|
+
return {
|
|
231
|
+
success: false,
|
|
232
|
+
reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${this.statesStack.peek()} does not accept it. Expected ${(_a = state === null || state === void 0 ? void 0 : state.getTerminalKeys().join(", ")) !== null && _a !== void 0 ? _a : "nothing"}`,
|
|
233
|
+
};
|
|
234
|
+
if (action.type !== "shift")
|
|
235
|
+
return {
|
|
236
|
+
success: false,
|
|
237
|
+
reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${this.statesStack.peek()} reduces on it instead of shifting it`,
|
|
238
|
+
};
|
|
239
|
+
this.pushState(action.value);
|
|
240
|
+
this.symbolsStack.push({ type: "token", token });
|
|
241
|
+
return undefined;
|
|
242
|
+
}
|
|
243
|
+
syntaxErrorMessage(state, token) {
|
|
244
|
+
const expected = state.getTerminalKeys();
|
|
245
|
+
const got = this.options.toStringifiedTokenType(token.type);
|
|
246
|
+
const lexeme = token.lexeme === "" ? "" : ` ("${token.lexeme}")`;
|
|
247
|
+
return (`Invalid syntax at ${token.line}:${token.column}: got ${got}${lexeme}, but expected ${expected.length === 0 ? "the end of the input" : `one of [${expected.join("], [")}]`}`);
|
|
248
|
+
}
|
|
134
249
|
}
|
|
250
|
+
exports.LR1Parser = LR1Parser;
|
|
135
251
|
class LR1ParserGraveError extends Error {
|
|
136
252
|
constructor(reason, currentToken, err) {
|
|
137
|
-
super(reason);
|
|
253
|
+
super(reason, err === undefined ? undefined : { cause: err });
|
|
138
254
|
this.reason = reason;
|
|
139
255
|
this.currentToken = currentToken;
|
|
256
|
+
this.name = "LR1ParserGraveError";
|
|
140
257
|
}
|
|
141
258
|
}
|
|
142
259
|
exports.LR1ParserGraveError = LR1ParserGraveError;
|
|
260
|
+
class SparseGrammarError extends Error {
|
|
261
|
+
constructor(reason, token) {
|
|
262
|
+
super(`Encountered error "${reason}" at ${token.line}:${token.column}`);
|
|
263
|
+
this.reason = reason;
|
|
264
|
+
this.token = token;
|
|
265
|
+
this.name = "SparseGrammarError";
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
exports.SparseGrammarError = SparseGrammarError;
|
|
269
|
+
const truncate = (value, max) => value.length <= max ? value : `${value.slice(0, max)}... (${value.length} characters)`;
|
|
270
|
+
const describeProduction = (production) => production.name == null ? ` (${production.identifier})` : ` ("${production.name}")`;
|
|
143
271
|
//# sourceMappingURL=parser.js.map
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":";;;AACA,2CAA6C;AAC7C,yCAAsC;AAMtC,MAAa,UAAU;IAGrB,YAAY,UAAU,IAAI,GAAG,EAAuB;QAClD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAEM,iBAAiB,CAAC,QAAgB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEM,iBAAiB,CAAC,QAAgB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,UAAU;QACR,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,IAA0C;QAC5D,OAAO,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;CACF;AAtBD,gCAsBC;AAWD,MAAa,MAAM;IACjB,YACkB,OAIf;QAJe,YAAO,GAAP,OAAO,CAItB;IACA,CAAC;IAEG,MAAM,CAAC,kBAAkB,CAA4B,OAG3D;QACC,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,YAAY,CAAC,OAAO,KAAK,KAAK;YAAE,OAAO,YAAY,CAAC;QACxD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;QAElC,MAAM,MAAM,GAAG,IAAI,MAAM,CAA4B;YACnD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;YACzB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;SACvD,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IAEM,MAAM,CAAC,eAAe,CAA4B,OAGxD;QACC,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAA4B,OAAO,CAAC,CAAC;QAC7E,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;YAC1B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,QAAQ,CACb,KAAwD,EACxD,OAGC;;QAED,OAAO,IAAI,SAAS,CAA4B,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,IAAI,EAAE,KAAK,CAAC,CAAC;IACjH,CAAC;CACF;AA7CD,wBA6CC;AAsBD,MAAM,SAAS;IAKb,YACkB,OAIf,EACe,OAA+C,EAC/C,OAAiE,EACjE,KAAwD;QAPxD,YAAO,GAAP,OAAO,CAItB;QACe,YAAO,GAAP,OAAO,CAAwC;QAC/C,YAAO,GAAP,OAAO,CAA0D;QACjE,UAAK,GAAL,KAAK,CAAmD;QAZ1E,gBAAW,GAAkB,IAAI,aAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,iBAAY,GAAqD,IAAI,aAAK,EAAE,CAAC;QAC7E,eAAU,GAAuC,EAAE,CAAC;IAWjD,CAAC;IAEG,KAAK;;QACV,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAErE,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAExF,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;oBACvB,MAAM,IAAI,mBAAmB,CAC3B,4BAA4B,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CACvE,GAAG,CACJ,YAAY,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EACjD,KAAK,CACN,CAAC;gBAEJ,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;oBAClC,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM;oBACN,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,QAAQ,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;oBAC1G,KAAK,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;oBACvD,MAAM,EAAE,CAAC,OAAkD,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,CAAC;oBAC7G,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;iBAC9G,CAAC,CAAC;gBAEH,IAAI,cAAc,CAAC,OAAO,KAAK,KAAK;oBAAE,MAAM,IAAI,mBAAmB,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAElG,KAAK,GAAG,MAAA,cAAc,CAAC,KAAK,mCAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC3D,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACtF,CAAC;YAED,MAAM,WAAW,GAAG,MAAqB,CAAC;YAC1C,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAEjC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC;iBAGI,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvC,IAAI,WAAW,CAAC,KAAK,KAAK,CAAC;oBAAE,MAAM;gBACnC,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAGlD,MAAM,MAAM,GAAgD,EAAE,CAAC;gBAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;oBACxC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;gBACzB,CAAC;gBAGD,MAAM,eAAe,GAAG,UAAU,CAAC,uBAAuB,CAAC;gBAE3D,IAAI,CAAC;oBAEH,MAAM,GAAG,GAAG,EAA0D,CAAC;oBAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBAClC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI;4BACtB,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;oBACzF,CAAC;oBAED,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;oBAChD,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;oBAE3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,MAAM,IAAI,mBAAmB,CAC3B,oDAAoD,eAAe,sBAAsB,KAAK,EAAE,EAChG,KAAK,CACN,CAAC;gBACJ,CAAC;gBAGD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAE5E,IAAI,UAAU,IAAI,SAAS;oBACzB,MAAM,IAAI,mBAAmB,CAC3B,iCAAiC,OAAO,oBAAoB,UAAU,CAAC,UAAU,mCAAmC,eAAe,EAAE,EACrI,KAAK,CACN,CAAC;qBACC,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM;oBACjC,MAAM,IAAI,mBAAmB,CAC3B,mCAAmC,OAAO,oBAAoB,UAAU,CAAC,UAAU,mCAAmC,eAAe,eAAe,UAAU,CAAC,IAAI,EAAE,EACrK,KAAK,CACN,CAAC;gBAEJ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACpF,CAAC;CACF;AAED,MAAa,mBAAyC,SAAQ,KAAK;IACjE,YACkB,MAAc,EACd,YAAwC,EACxD,GAAW;QAEX,KAAK,CAAC,MAAM,CAAC,CAAC;QAJE,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAA4B;IAI1D,CAAC;CACF;AARD,kDAQC"}
|
|
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":";;;AAAA,2CAAoG;AACpG,mDAA6G;AAC7G,sCAAyE;AACzE,qCAAsC;AAEtC,yCAAqE;AAErE,MAAM,SAAU,SAAQ,qBAAQ;IAC9B,YAA4B,KAAyB;QACnD,KAAK,EAAE,CAAC;QADkB,UAAK,GAAL,KAAK,CAAoB;IAErD,CAAC;IAED,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,mBAAU,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACzF,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,QAAS,SAAQ,qBAAQ;IAC7B,YACkB,IAA6B,EAC7B,IAAkB,EAClB,MAAmB,EACnB,SAAiB;QAEjC,KAAK,EAAE,CAAC;QALQ,SAAI,GAAJ,IAAI,CAAyB;QAC7B,SAAI,GAAJ,IAAI,CAAc;QAClB,WAAM,GAAN,MAAM,CAAa;QACnB,cAAS,GAAT,SAAS,CAAQ;IAGnC,CAAC;CACF;AAGD,MAAM,QAAQ,GAA+B;IAC3C,OAAO,EAAE,CAAC,GAAoC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM;IAC7D,MAAM,EAAE,CAAC,GAA8D,EAAE,EAAE;QACzE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI;YAAE,OAAO,IAAI,qBAAQ,CAAY,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;YAC5E,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,EAAE,CAAC,GAAkD,EAAE,EAAE;QAC5D,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI;YAAE,OAAO,IAAI,qBAAQ,CAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;YAC3D,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ,EAAE,CAAC,GAAiD,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAgB;YAC1B,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAC5D,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAChD,CAAC;QACF,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;IAED,QAAQ,EAAE,CAAC,GAAgD,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChF,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;CACF,CAAC;AAeK,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,UAA8B,EAAE,EAAwB,EAAE;IACtG,MAAM,KAAK,GAAG,kCAAqB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,IAAA,yCAA4B,EAAC,mBAAiB,CAAC,CAAC;IAExE,IAAI,MAA2B,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC7C,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC,GAAG,CAAC;SACtD,CAAC,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAA6B,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,4BAAmB,IAAI,GAAG,CAAC,YAAY,IAAI,IAAI;YAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,YAA4B,EAAE,CAAC;QACzF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAA,0BAAiB,EAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAA,8BAAqB,GAAE,EAAE,CAAC;IAC5F,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACnF,OAAO,IAAA,8BAAmB,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC;AAlBW,QAAA,cAAc,kBAkBzB;AAEK,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,UAA8B,EAAE,EAAgB,EAAE;IAC3F,MAAM,MAAM,GAAG,IAAA,sBAAc,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAC1B,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,MAAM,wCAAwC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CACtH,CAAC;IACJ,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAPW,QAAA,WAAW,eAOtB"}
|
|
@@ -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[]>>;
|