@scinorandex/sparse 0.1.2 → 0.1.3
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/AGENTS.md +1 -1
- package/README.md +61 -55
- package/dist/parser.d.ts +0 -1
- package/dist/parser.js +1 -6
- package/dist/parser.js.map +1 -1
- package/package.json +1 -1
- package/src/parser.ts +8 -26
- package/test/lalr.test.ts +8 -12
- package/test/parser.test.ts +6 -21
package/AGENTS.md
CHANGED
|
@@ -54,7 +54,7 @@ README.md is the user-facing doc (grammar syntax, reducer contract, recovery gui
|
|
|
54
54
|
- `src/meta/selfhosted.ts` — grammar-file parser + production unrolling
|
|
55
55
|
- `src/meta/common.ts` — `Production` type + `validateProductions`
|
|
56
56
|
- `src/table/selfhosted.ts` — table-file parser (`tryBuildStates`), `src/table/validate.ts` — table validation
|
|
57
|
-
- `src/cli.ts` — `--input/--output/--lalr/--check/--stdout/--
|
|
57
|
+
- `src/cli.ts` — `--input/--output/--lalr/--check/--stdout/--help`
|
|
58
58
|
- `example/` — `math` (prebuilt table), `kleene-test` (`*`/`+`), `LoLang` (large grammar + recovery, exports
|
|
59
59
|
its lexer for the tests), `selfhosted` (codegen)
|
|
60
60
|
- `test/` — `grammar`, `table`, `parser`, `lalr`, `codegen`, `cli`
|
package/README.md
CHANGED
|
@@ -11,15 +11,21 @@ Sparse allows developers to easily create LR(1) parsers and LR(1) parsing tables
|
|
|
11
11
|
|
|
12
12
|
## Table of contents
|
|
13
13
|
|
|
14
|
+
- [Sparse - Scin's Parsing Library](#sparse---scins-parsing-library)
|
|
15
|
+
- [Table of contents](#table-of-contents)
|
|
14
16
|
- [Getting started](#getting-started)
|
|
15
17
|
- [Grammar syntax reference](#grammar-syntax-reference)
|
|
16
|
-
- [
|
|
18
|
+
- [What Sparse checks for you](#what-sparse-checks-for-you)
|
|
17
19
|
- [Reducers](#reducers)
|
|
18
20
|
- [Repetition with `*` and `+`](#repetition-with--and-)
|
|
19
21
|
- [Error recovery](#error-recovery)
|
|
20
22
|
- [Generating and shipping the parsing table](#generating-and-shipping-the-parsing-table)
|
|
21
23
|
- [API reference](#api-reference)
|
|
24
|
+
- [Reading and writing grammars](#reading-and-writing-grammars)
|
|
25
|
+
- [Building parsers](#building-parsers)
|
|
26
|
+
- [Helpers](#helpers)
|
|
22
27
|
- [Known limitations](#known-limitations)
|
|
28
|
+
- [AI Disclaimer](#ai-disclaimer)
|
|
23
29
|
|
|
24
30
|
## Getting started
|
|
25
31
|
|
|
@@ -139,16 +145,16 @@ async function main() {
|
|
|
139
145
|
|
|
140
146
|
A grammar file is a list of productions. Whitespace is insignificant, `//` starts a line comment, and `/* ... */` spans lines.
|
|
141
147
|
|
|
142
|
-
| Syntax
|
|
143
|
-
|
|
|
144
|
-
| `<A>: <B> [C];`
|
|
145
|
-
| `<A: name>: ...;`
|
|
146
|
-
| `[TOK: name]`
|
|
147
|
-
| `<VAR: name>`
|
|
148
|
-
| `[A
|
|
149
|
-
| `<A
|
|
150
|
-
| `([A] [B])?`
|
|
151
|
-
| `// comment`, `/* comment */` | Comments
|
|
148
|
+
| Syntax | Meaning |
|
|
149
|
+
| ----------------------------- | ------------------------------------------------------------------------------- |
|
|
150
|
+
| `<A>: <B> [C];` | `A` is made of one `B` followed by one `C` |
|
|
151
|
+
| `<A: name>: ...;` | The production is *named*: its reducer is looked up under `name` |
|
|
152
|
+
| `[TOK: name]` | Names the terminal on the right hand side so it shows up on the reducer's `bag` |
|
|
153
|
+
| `<VAR: name>` | Same, for a variable |
|
|
154
|
+
| `[A | B]` | Alternatives: unrolled into one production per alternative |
|
|
155
|
+
| `<A | B>` | Same, for variables |
|
|
156
|
+
| `([A] [B])?` | Optional group, unrolled into one production with and one without it |
|
|
157
|
+
| `// comment`, `/* comment */` | Comments |
|
|
152
158
|
|
|
153
159
|
Identifiers may contain letters, digits, `_` and `-`, and must start with a letter or `_`.
|
|
154
160
|
|
|
@@ -258,13 +264,13 @@ try {
|
|
|
258
264
|
Pass a `recover` function to decide what happens instead. It receives the lexer, both stacks, the table,
|
|
259
265
|
and these helpers:
|
|
260
266
|
|
|
261
|
-
| Helper
|
|
262
|
-
|
|
|
263
|
-
| `addError(reason)`
|
|
264
|
-
| `crash(reason)`
|
|
265
|
-
| `finish(options?)`
|
|
266
|
-
| `insertToken(token)` | Shifts a token the input did not have, e.g. a synthesized `;`
|
|
267
|
-
| `isSafe()`
|
|
267
|
+
| Helper | What it does |
|
|
268
|
+
| -------------------- | ------------------------------------------------------------------- |
|
|
269
|
+
| `addError(reason)` | Records an error, keeps parsing, and returns it in `parse().errors` |
|
|
270
|
+
| `crash(reason)` | Stops parsing and throws a `LR1ParserGraveError` |
|
|
271
|
+
| `finish(options?)` | Stops recovery and carries on parsing from the current state |
|
|
272
|
+
| `insertToken(token)` | Shifts a token the input did not have, e.g. a synthesized `;` |
|
|
273
|
+
| `isSafe()` | True when the current state can consume the next real token |
|
|
268
274
|
|
|
269
275
|
```ts
|
|
270
276
|
const parser = parserGenerator.generate(lexer, {
|
|
@@ -306,15 +312,15 @@ generate the table once at build time and commit it:
|
|
|
306
312
|
npx sparse --input=grammar.txt --output=table.txt
|
|
307
313
|
```
|
|
308
314
|
|
|
309
|
-
| Flag
|
|
310
|
-
|
|
|
311
|
-
| `--input=<file>`
|
|
312
|
-
| `--output=<file>` | Table to write; missing directories are created
|
|
313
|
-
| `--lalr`
|
|
314
|
-
| `--check`
|
|
315
|
-
| `--stdout`
|
|
316
|
-
| `--quiet`
|
|
317
|
-
| `--help`
|
|
315
|
+
| Flag | Meaning |
|
|
316
|
+
| ----------------- | ----------------------------------------------------------------- |
|
|
317
|
+
| `--input=<file>` | Grammar to read (required) |
|
|
318
|
+
| `--output=<file>` | Table to write; missing directories are created |
|
|
319
|
+
| `--lalr` | Generate LALR(1) states instead of LR(1) |
|
|
320
|
+
| `--check` | Write nothing; verify that `<output>` already matches the grammar |
|
|
321
|
+
| `--stdout` | Print the table instead of writing it |
|
|
322
|
+
| `--quiet` | Hide warnings about suspicious rules |
|
|
323
|
+
| `--help` | Usage |
|
|
318
324
|
|
|
319
325
|
By default, LR(1) states are generated. You can generate LALR(1) states instead by passing the `--lalr`
|
|
320
326
|
flag (or setting `mode: "lalr1"` in `Sparse.fromProductions`): the resulting table is never larger than
|
|
@@ -333,42 +339,42 @@ Then load the table with `Sparse.fromGrammarFile`, as shown in [Getting started]
|
|
|
333
339
|
|
|
334
340
|
### Reading and writing grammars
|
|
335
341
|
|
|
336
|
-
| Function
|
|
337
|
-
|
|
|
342
|
+
| Function | Returns |
|
|
343
|
+
| ---------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
338
344
|
| `buildProductions(source)` / `tryBuildProductions(source)` | The unrolled productions. Throws / returns a `Result` failure with the offending token |
|
|
339
|
-
| `loadGrammar(path)`
|
|
340
|
-
| `buildStates(table)` / `tryBuildStates(table)`
|
|
341
|
-
| `loadTable(path)`
|
|
342
|
-
| `generateStates(productions, options?)`
|
|
343
|
-
| `validateProductions(productions, options?)`
|
|
344
|
-
| `validateTable(productions, states)`
|
|
345
|
-
| `validateTableStates(states, options?)`
|
|
345
|
+
| `loadGrammar(path)` | Same, but reads the file, turning missing files into failures too |
|
|
346
|
+
| `buildStates(table)` / `tryBuildStates(table)` | `TableState[]` from a table file, validating action syntax and state numbers |
|
|
347
|
+
| `loadTable(path)` | Same, but reads the file |
|
|
348
|
+
| `generateStates(productions, options?)` | `GeneratorResult`; `options` is `{ mode, onWarning, onProgress }` |
|
|
349
|
+
| `validateProductions(productions, options?)` | Fails on a grammar that cannot generate a correct table |
|
|
350
|
+
| `validateTable(productions, states)` | Fails when a table does not belong to the productions |
|
|
351
|
+
| `validateTableStates(states, options?)` | Fails on a malformed table |
|
|
346
352
|
|
|
347
353
|
### Building parsers
|
|
348
354
|
|
|
349
|
-
| Function
|
|
350
|
-
|
|
|
355
|
+
| Function | Returns |
|
|
356
|
+
| --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
351
357
|
| `Sparse.fromGrammarFile({ grammarPath, tablePath, toStringifiedTokenType, onWarning?, validate? })` | Loads a grammar and its prebuilt table, cross-checking them |
|
|
352
|
-
| `Sparse.fromProductions({ productions, toStringifiedTokenType, mode?, quiet? })`
|
|
353
|
-
| `Sparse.tryFromProductions(...)`
|
|
354
|
-
| `new Sparse({ productions, states, toStringifiedTokenType, validate?, source? })`
|
|
355
|
-
| `generator.generate(lexer, { reducer, recover? })`
|
|
356
|
-
| `parser.parse()`
|
|
357
|
-
| `parser.reset()`
|
|
358
|
+
| `Sparse.fromProductions({ productions, toStringifiedTokenType, mode?, quiet? })` | Generates states at startup |
|
|
359
|
+
| `Sparse.tryFromProductions(...)` | Same, as a `Result` |
|
|
360
|
+
| `new Sparse({ productions, states, toStringifiedTokenType, validate?, source? })` | Use when you already hold the states |
|
|
361
|
+
| `generator.generate(lexer, { reducer, recover? })` | A parser |
|
|
362
|
+
| `parser.parse()` | `{ result, errors }` |
|
|
363
|
+
| `parser.reset()` | Clears the stacks and errors |
|
|
358
364
|
|
|
359
365
|
### Helpers
|
|
360
366
|
|
|
361
|
-
| Export
|
|
362
|
-
|
|
|
363
|
-
| `enumToString(TokenType)`
|
|
364
|
-
| `defineReducers(reducers)`
|
|
365
|
-
| `assertReducersCoverGrammar(productions, reducers)`
|
|
366
|
-
| `missingReducerNames(productions, reducers)` / `missingReducerMessage(...)` | Same, as data
|
|
367
|
-
| `namedProductions(productions)`
|
|
368
|
-
| `TableState.fromJSObject(json)` / `GeneratorResult.toJSObject()`
|
|
369
|
-
| `hydrateProduction(json)` / `dehydateProduction(production)`
|
|
370
|
-
| `buildErrorWindow(source, token)`
|
|
371
|
-
| `Stack`
|
|
367
|
+
| Export | Purpose |
|
|
368
|
+
| --------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
369
|
+
| `enumToString(TokenType)` | The `toStringifiedTokenType` every example used to write by hand |
|
|
370
|
+
| `defineReducers(reducers)` | Turns a map of named reducers into a reducer |
|
|
371
|
+
| `assertReducersCoverGrammar(productions, reducers)` | Fails up front when a named production has no reducer |
|
|
372
|
+
| `missingReducerNames(productions, reducers)` / `missingReducerMessage(...)` | Same, as data |
|
|
373
|
+
| `namedProductions(productions)` | Every production the grammar names |
|
|
374
|
+
| `TableState.fromJSObject(json)` / `GeneratorResult.toJSObject()` | Round trip a table through JSON |
|
|
375
|
+
| `hydrateProduction(json)` / `dehydateProduction(production)` | Round trip productions through JSON |
|
|
376
|
+
| `buildErrorWindow(source, token)` | Renders the window around a token |
|
|
377
|
+
| `Stack` | `push`, `pop`, `peek`, `peekAt`, `size`, `isEmpty`, `toArray` |
|
|
372
378
|
|
|
373
379
|
## Known limitations
|
|
374
380
|
|
package/dist/parser.d.ts
CHANGED
|
@@ -45,7 +45,6 @@ export type FromProductionsOptions<TokenType> = {
|
|
|
45
45
|
productions: Production[];
|
|
46
46
|
toStringifiedTokenType: (tokenType: TokenType) => string;
|
|
47
47
|
mode?: "lr1" | "lalr1";
|
|
48
|
-
quiet?: boolean;
|
|
49
48
|
onWarning?: (warning: ProductionWarning) => void;
|
|
50
49
|
onProgress?: (statesGenerated: number) => void;
|
|
51
50
|
};
|
package/dist/parser.js
CHANGED
|
@@ -66,11 +66,6 @@ class Sparse {
|
|
|
66
66
|
states: states.toStates(),
|
|
67
67
|
toStringifiedTokenType: options.toStringifiedTokenType,
|
|
68
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
|
-
}
|
|
74
69
|
return { success: true, value: sparse };
|
|
75
70
|
}
|
|
76
71
|
static fromProductions(options) {
|
|
@@ -244,7 +239,7 @@ class LR1Parser {
|
|
|
244
239
|
const expected = state.getTerminalKeys();
|
|
245
240
|
const got = this.options.toStringifiedTokenType(token.type);
|
|
246
241
|
const lexeme = token.lexeme === "" ? "" : ` ("${token.lexeme}")`;
|
|
247
|
-
return
|
|
242
|
+
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
243
|
}
|
|
249
244
|
}
|
|
250
245
|
exports.LR1Parser = LR1Parser;
|
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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"}
|
package/package.json
CHANGED
package/src/parser.ts
CHANGED
|
@@ -17,10 +17,7 @@ export class TableState {
|
|
|
17
17
|
*/
|
|
18
18
|
public readonly rawActions: Map<string, string>;
|
|
19
19
|
|
|
20
|
-
constructor(
|
|
21
|
-
actions = new Map<string, TableAction>(),
|
|
22
|
-
rawActions = new Map<string, string>(),
|
|
23
|
-
) {
|
|
20
|
+
constructor(actions = new Map<string, TableAction>(), rawActions = new Map<string, string>()) {
|
|
24
21
|
this.actions = actions;
|
|
25
22
|
this.rawActions = rawActions;
|
|
26
23
|
}
|
|
@@ -94,19 +91,15 @@ export type FromProductionsOptions<TokenType> = {
|
|
|
94
91
|
toStringifiedTokenType: (tokenType: TokenType) => string;
|
|
95
92
|
mode?: "lr1" | "lalr1";
|
|
96
93
|
/** Generating states can take a while for big grammars; set to true to silence the timing log. */
|
|
97
|
-
quiet?: boolean;
|
|
98
94
|
onWarning?: (warning: ProductionWarning) => void;
|
|
99
95
|
onProgress?: (statesGenerated: number) => void;
|
|
100
96
|
};
|
|
101
97
|
|
|
102
98
|
export class Sparse<TokenType, Metadata, Node> {
|
|
103
|
-
public constructor(
|
|
104
|
-
public readonly options: SparseOptions<TokenType>,
|
|
105
|
-
) {
|
|
99
|
+
public constructor(public readonly options: SparseOptions<TokenType>) {
|
|
106
100
|
if (options.validate === true) {
|
|
107
101
|
const result = validateTable(options.productions, options.states, { source: options.source });
|
|
108
|
-
if (result.success === false)
|
|
109
|
-
throw new Error(`The parsing table does not match the grammar: ${result.reason}`);
|
|
102
|
+
if (result.success === false) throw new Error(`The parsing table does not match the grammar: ${result.reason}`);
|
|
110
103
|
}
|
|
111
104
|
}
|
|
112
105
|
|
|
@@ -129,12 +122,6 @@ export class Sparse<TokenType, Metadata, Node> {
|
|
|
129
122
|
toStringifiedTokenType: options.toStringifiedTokenType,
|
|
130
123
|
});
|
|
131
124
|
|
|
132
|
-
if (options.quiet !== true) {
|
|
133
|
-
const elapsed = Date.now() - startedAt;
|
|
134
|
-
const label = options.mode === "lalr1" ? "LALR(1)" : "LR(1)";
|
|
135
|
-
console.error(`Sparse generated ${sparse.options.states.length} ${label} states in ${elapsed}ms`);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
125
|
return { success: true, value: sparse };
|
|
139
126
|
}
|
|
140
127
|
|
|
@@ -282,8 +269,7 @@ export class LR1Parser<TokenType, Metadata, Node> {
|
|
|
282
269
|
crash: (reason: string) => ({ success: false, reason }),
|
|
283
270
|
finish: (options?: { newToken: Token<TokenType, Metadata> }) => ({ success: true, token: options?.newToken }),
|
|
284
271
|
insertToken: (newToken: Token<TokenType, Metadata>) => this.insertToken(newToken),
|
|
285
|
-
isSafe: () =>
|
|
286
|
-
currentStates().actions.has(`[${toStringifiedTokenType(this.lexer.peekNextToken().type)}]`),
|
|
272
|
+
isSafe: () => currentStates().actions.has(`[${toStringifiedTokenType(this.lexer.peekNextToken().type)}]`),
|
|
287
273
|
});
|
|
288
274
|
|
|
289
275
|
if (recoveryResult.success === false) throw new LR1ParserGraveError(recoveryResult.reason, token);
|
|
@@ -394,9 +380,7 @@ export class LR1Parser<TokenType, Metadata, Node> {
|
|
|
394
380
|
if (action == null)
|
|
395
381
|
return {
|
|
396
382
|
success: false,
|
|
397
|
-
reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${
|
|
398
|
-
this.statesStack.peek()
|
|
399
|
-
} does not accept it. Expected ${state?.getTerminalKeys().join(", ") ?? "nothing"}`,
|
|
383
|
+
reason: `Cannot insert ${this.options.toStringifiedTokenType(token.type)} here: state ${this.statesStack.peek()} does not accept it. Expected ${state?.getTerminalKeys().join(", ") ?? "nothing"}`,
|
|
400
384
|
};
|
|
401
385
|
|
|
402
386
|
if (action.type !== "shift")
|
|
@@ -416,11 +400,9 @@ export class LR1Parser<TokenType, Metadata, Node> {
|
|
|
416
400
|
const expected = state.getTerminalKeys();
|
|
417
401
|
const got = this.options.toStringifiedTokenType(token.type);
|
|
418
402
|
const lexeme = token.lexeme === "" ? "" : ` ("${token.lexeme}")`;
|
|
419
|
-
return
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
}`
|
|
423
|
-
);
|
|
403
|
+
return `Invalid syntax at ${token.line}:${token.column}: got ${got}${lexeme}, but expected ${
|
|
404
|
+
expected.length === 0 ? "the end of the input" : `one of [${expected.join("], [")}]`
|
|
405
|
+
}`;
|
|
424
406
|
}
|
|
425
407
|
}
|
|
426
408
|
|
package/test/lalr.test.ts
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import fs from "fs/promises";
|
|
3
|
-
import {
|
|
4
|
-
LR1StackSymbol,
|
|
5
|
-
Sparse,
|
|
6
|
-
buildProductions,
|
|
7
|
-
buildStates,
|
|
8
|
-
enumToString,
|
|
9
|
-
generateStates,
|
|
10
|
-
} from "../src/index";
|
|
3
|
+
import { LR1StackSymbol, Sparse, buildProductions, buildStates, enumToString, generateStates } from "../src/index";
|
|
11
4
|
import { MathTokenType, mathLexer, readFile } from "./helpers";
|
|
12
5
|
import { lexerGenerator as loLangLexerGenerator, LoLangTokenType } from "../example/LoLang/example";
|
|
13
6
|
|
|
@@ -39,7 +32,6 @@ describe("LALR(1)", () => {
|
|
|
39
32
|
productions,
|
|
40
33
|
toStringifiedTokenType,
|
|
41
34
|
mode: "lalr1",
|
|
42
|
-
quiet: true,
|
|
43
35
|
});
|
|
44
36
|
|
|
45
37
|
for (const expression of EXPRESSIONS) {
|
|
@@ -64,8 +56,12 @@ describe("LALR(1)", () => {
|
|
|
64
56
|
toStringifiedTokenType: enumToString<LoLangTokenType>(LoLangTokenType),
|
|
65
57
|
validate: true,
|
|
66
58
|
})
|
|
67
|
-
.generate(
|
|
68
|
-
|
|
59
|
+
.generate(
|
|
60
|
+
loLangLexerGenerator.generate(source, () => ({})),
|
|
61
|
+
{ reducer },
|
|
62
|
+
)
|
|
63
|
+
.parse()
|
|
64
|
+
.result?.toObject();
|
|
69
65
|
|
|
70
66
|
const fromLr1 = parse(lr1.value.toStates());
|
|
71
67
|
const fromLalr = parse(lalr.value.toStates());
|
|
@@ -111,4 +107,4 @@ describe("LALR(1)", () => {
|
|
|
111
107
|
// ...but the table file format has no way to express a state without actions.
|
|
112
108
|
expect(() => result.value.toTable()).toThrow(/has no actions/);
|
|
113
109
|
});
|
|
114
|
-
});
|
|
110
|
+
});
|
package/test/parser.test.ts
CHANGED
|
@@ -15,14 +15,7 @@ import {
|
|
|
15
15
|
missingReducerNames,
|
|
16
16
|
namedProductions,
|
|
17
17
|
} from "../src/index";
|
|
18
|
-
import {
|
|
19
|
-
MathTokenType,
|
|
20
|
-
SemiTokenType,
|
|
21
|
-
mathLexer,
|
|
22
|
-
readFile,
|
|
23
|
-
root,
|
|
24
|
-
semiLexer,
|
|
25
|
-
} from "./helpers";
|
|
18
|
+
import { MathTokenType, SemiTokenType, mathLexer, readFile, root, semiLexer } from "./helpers";
|
|
26
19
|
|
|
27
20
|
type Node = { nodes: LR1StackSymbol<MathTokenType, {}, Node>[] };
|
|
28
21
|
|
|
@@ -63,7 +56,6 @@ describe("parsing", () => {
|
|
|
63
56
|
const generator = Sparse.fromProductions<MathTokenType, {}, unknown>({
|
|
64
57
|
productions,
|
|
65
58
|
toStringifiedTokenType,
|
|
66
|
-
quiet: true,
|
|
67
59
|
});
|
|
68
60
|
|
|
69
61
|
const seen: unknown[] = [];
|
|
@@ -89,7 +81,6 @@ describe("parsing", () => {
|
|
|
89
81
|
const generator = Sparse.fromProductions<MathTokenType, {}, Node>({
|
|
90
82
|
productions,
|
|
91
83
|
toStringifiedTokenType,
|
|
92
|
-
quiet: true,
|
|
93
84
|
});
|
|
94
85
|
|
|
95
86
|
try {
|
|
@@ -113,7 +104,6 @@ describe("parsing", () => {
|
|
|
113
104
|
const generator = Sparse.fromProductions<MathTokenType, {}, Node>({
|
|
114
105
|
productions,
|
|
115
106
|
toStringifiedTokenType,
|
|
116
|
-
quiet: true,
|
|
117
107
|
});
|
|
118
108
|
|
|
119
109
|
try {
|
|
@@ -167,7 +157,6 @@ describe("parsing", () => {
|
|
|
167
157
|
const generator = Sparse.fromProductions<SemiTokenType, {}, unknown>({
|
|
168
158
|
productions: productions as any,
|
|
169
159
|
toStringifiedTokenType: toSemiStringifiedTokenType,
|
|
170
|
-
quiet: true,
|
|
171
160
|
});
|
|
172
161
|
|
|
173
162
|
const parser = generator.generate(semiLexer("1"), {
|
|
@@ -198,7 +187,6 @@ describe("error recovery", () => {
|
|
|
198
187
|
<PROGRAM: program>: [NUMBER] [SEMICOLON] [EOF];
|
|
199
188
|
`),
|
|
200
189
|
toStringifiedTokenType: toSemiStringifiedTokenType,
|
|
201
|
-
quiet: true,
|
|
202
190
|
});
|
|
203
191
|
|
|
204
192
|
it("inserts a token that was missing from the input", () => {
|
|
@@ -246,7 +234,9 @@ describe("error recovery", () => {
|
|
|
246
234
|
reducer: () => null,
|
|
247
235
|
recover({ insertToken, crash }) {
|
|
248
236
|
// NUMBER is not shiftable at this point, so inserting it has to be refused.
|
|
249
|
-
const inserted = insertToken(
|
|
237
|
+
const inserted = insertToken(
|
|
238
|
+
new Token<SemiTokenType, {}>(SemiTokenType.NUMBER, "1", new ColumnAndRow(0, 0), {}),
|
|
239
|
+
);
|
|
250
240
|
if (inserted != null) {
|
|
251
241
|
reason = inserted.reason;
|
|
252
242
|
return inserted;
|
|
@@ -270,9 +260,7 @@ describe("reducer helpers", () => {
|
|
|
270
260
|
});
|
|
271
261
|
|
|
272
262
|
it("names the reducers that are missing", () => {
|
|
273
|
-
expect(missingReducerNames(buildProductions(grammar), { program: () => null })).toEqual([
|
|
274
|
-
"autogenerated-kleene",
|
|
275
|
-
]);
|
|
263
|
+
expect(missingReducerNames(buildProductions(grammar), { program: () => null })).toEqual(["autogenerated-kleene"]);
|
|
276
264
|
});
|
|
277
265
|
|
|
278
266
|
it("explains that * and + need the autogenerated-kleene reducer", () => {
|
|
@@ -289,7 +277,6 @@ describe("reducer helpers", () => {
|
|
|
289
277
|
const generator = Sparse.fromProductions<MathTokenType, {}, string>({
|
|
290
278
|
productions: buildProductions(grammar),
|
|
291
279
|
toStringifiedTokenType,
|
|
292
|
-
quiet: true,
|
|
293
280
|
});
|
|
294
281
|
|
|
295
282
|
const parser = generator.generate(mathLexer("1 + 2"), {
|
|
@@ -305,7 +292,6 @@ describe("reducer helpers", () => {
|
|
|
305
292
|
<PROGRAM: program>: [NUMBER] [EOF];
|
|
306
293
|
`),
|
|
307
294
|
toStringifiedTokenType,
|
|
308
|
-
quiet: true,
|
|
309
295
|
});
|
|
310
296
|
|
|
311
297
|
expect(() => generator.generate(mathLexer("1"), { reducer: defineReducers({}) }).parse()).toThrow(
|
|
@@ -319,7 +305,6 @@ describe("reducer helpers", () => {
|
|
|
319
305
|
<PROGRAM: program>: [NUMBER] [EOF];
|
|
320
306
|
`),
|
|
321
307
|
toStringifiedTokenType,
|
|
322
|
-
quiet: true,
|
|
323
308
|
});
|
|
324
309
|
|
|
325
310
|
try {
|
|
@@ -389,4 +374,4 @@ describe("loading grammars and tables from disk", () => {
|
|
|
389
374
|
expect(productions.map((production) => production.identifier)).toContain("<FACTOR_EXPRESSION>");
|
|
390
375
|
expect(productions.every((production) => production.rhs.length > 0)).toBe(true);
|
|
391
376
|
});
|
|
392
|
-
});
|
|
377
|
+
});
|