grammar-composer 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/exports/Exports.d.ts +4 -3
- package/dist/exports/Exports.d.ts.map +1 -1
- package/dist/exports/Exports.js +4 -3
- package/dist/exports/Exports.js.map +1 -1
- package/dist/parser/Builder.d.ts +11 -0
- package/dist/parser/Builder.d.ts.map +1 -0
- package/dist/{parser-generator/Grammar.js → parser/Builder.js} +10 -97
- package/dist/parser/Builder.js.map +1 -0
- package/dist/{parser-generator → parser}/Grammar.d.ts +8 -15
- package/dist/parser/Grammar.d.ts.map +1 -0
- package/dist/parser/Grammar.js +97 -0
- package/dist/parser/Grammar.js.map +1 -0
- package/dist/{parser-generator → parser}/ParseError.d.ts +0 -2
- package/dist/parser/ParseError.d.ts.map +1 -0
- package/dist/{parser-generator → parser}/ParseError.js +35 -8
- package/dist/parser/ParseError.js.map +1 -0
- package/dist/{parser-generator/TopDownParser.d.ts → parser/Parser.d.ts} +4 -3
- package/dist/parser/Parser.d.ts.map +1 -0
- package/dist/{parser-generator/TopDownParser.js → parser/Parser.js} +40 -6
- package/dist/parser/Parser.js.map +1 -0
- package/dist/parser/StaticAnalysis.d.ts.map +1 -0
- package/dist/{parser-generator → parser}/StaticAnalysis.js +16 -5
- package/dist/parser/StaticAnalysis.js.map +1 -0
- package/dist/parser/TerminalToText.d.ts.map +1 -0
- package/dist/{parser-generator → parser}/TerminalToText.js +1 -1
- package/dist/parser/TerminalToText.js.map +1 -0
- package/dist/tests/Test.js +2 -2
- package/dist/tests/Test.js.map +1 -1
- package/dist/utilities/Timer.d.ts +7 -3
- package/dist/utilities/Timer.d.ts.map +1 -1
- package/dist/utilities/Timer.js +41 -39
- package/dist/utilities/Timer.js.map +1 -1
- package/dist/utilities/Utilities.d.ts +2 -0
- package/dist/utilities/Utilities.d.ts.map +1 -1
- package/dist/utilities/Utilities.js +15 -1
- package/dist/utilities/Utilities.js.map +1 -1
- package/package.json +6 -4
- package/src/exports/Exports.ts +4 -3
- package/src/{parser-generator/Grammar.ts → parser/Builder.ts} +14 -191
- package/src/parser/Grammar.ts +194 -0
- package/src/{parser-generator → parser}/ParseError.ts +42 -11
- package/src/{parser-generator/TopDownParser.ts → parser/Parser.ts} +59 -10
- package/src/{parser-generator → parser}/StaticAnalysis.ts +17 -7
- package/src/{parser-generator → parser}/TerminalToText.ts +1 -1
- package/src/tests/Test.ts +2 -2
- package/src/utilities/Timer.ts +50 -48
- package/src/utilities/Utilities.ts +21 -1
- package/tsconfig.json +51 -53
- package/dist/parser-generator/Grammar.d.ts.map +0 -1
- package/dist/parser-generator/Grammar.js.map +0 -1
- package/dist/parser-generator/ParseError.d.ts.map +0 -1
- package/dist/parser-generator/ParseError.js.map +0 -1
- package/dist/parser-generator/StaticAnalysis.d.ts.map +0 -1
- package/dist/parser-generator/StaticAnalysis.js.map +0 -1
- package/dist/parser-generator/TerminalToText.d.ts.map +0 -1
- package/dist/parser-generator/TerminalToText.js.map +0 -1
- package/dist/parser-generator/TopDownParser.d.ts.map +0 -1
- package/dist/parser-generator/TopDownParser.js.map +0 -1
- /package/dist/{parser-generator → parser}/StaticAnalysis.d.ts +0 -0
- /package/dist/{parser-generator → parser}/TerminalToText.d.ts +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export * from '../parser
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export * from '../parser/Grammar.js';
|
|
2
|
+
export * from '../parser/Builder.js';
|
|
3
|
+
export { ParseError } from '../parser/ParseError.js';
|
|
4
|
+
export * from '../parser/Parser.js';
|
|
4
5
|
//# sourceMappingURL=Exports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Exports.d.ts","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"Exports.d.ts","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,cAAc,qBAAqB,CAAA"}
|
package/dist/exports/Exports.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export * from '../parser
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export * from '../parser/Grammar.js';
|
|
2
|
+
export * from '../parser/Builder.js';
|
|
3
|
+
export { ParseError } from '../parser/ParseError.js';
|
|
4
|
+
export * from '../parser/Parser.js';
|
|
4
5
|
//# sourceMappingURL=Exports.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Exports.js","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"Exports.js","sourceRoot":"","sources":["../../src/exports/Exports.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,cAAc,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Grammar, GrammarElement, Production } from './Grammar.js';
|
|
2
|
+
export declare function buildGrammar<T extends GrammarDefinition>(definitionObject: T | (new () => T), startProductionName: keyof T, options?: GrammarBuilderOptions<T>): Grammar<T>;
|
|
3
|
+
export declare function productionToGrammarElement(production: Production): GrammarElement;
|
|
4
|
+
export interface GrammarBuilderOptions<T> {
|
|
5
|
+
unwrappedNonterminalNames?: GrammarNonterminalNames<T>;
|
|
6
|
+
}
|
|
7
|
+
export type GrammarNonterminalNames<T> = (keyof T)[];
|
|
8
|
+
export type GrammarDefinition = {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=Builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../../src/parser/Builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAe,cAAc,EAAkD,UAAU,EAAE,MAAM,cAAc,CAAA;AAK/H,wBAAgB,YAAY,CAAC,CAAC,SAAS,iBAAiB,EACvD,gBAAgB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EACnC,mBAAmB,EAAE,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsF/C;AAqID,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAYjF;AAKD,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACvC,yBAAyB,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAA;CACtD;AAED,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;AAEpD,MAAM,MAAM,iBAAiB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { buildRegExp, inputStart, isPatternOptional } from 'regexp-composer';
|
|
2
1
|
import { isArray, isFunction, isString } from '../utilities/Utilities.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { detectAndAnnotateOptionalNodes, detectAndErrorOnLeftRecursion } from './StaticAnalysis.js';
|
|
3
|
+
import { Grammar } from './Grammar.js';
|
|
5
4
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
6
5
|
// Grammar builder method
|
|
7
6
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
@@ -16,7 +15,7 @@ export function buildGrammar(definitionObject, startProductionName, options) {
|
|
|
16
15
|
const nameLookup = new Map();
|
|
17
16
|
const nonterminalLookup = new Map();
|
|
18
17
|
const optionalNonterminalLookup = new Map();
|
|
19
|
-
for (const key
|
|
18
|
+
for (const key of Object.keys(definitionObject)) {
|
|
20
19
|
const objectProperty = definitionObject[key];
|
|
21
20
|
nameLookup.set(objectProperty, key);
|
|
22
21
|
if (!isFunction(objectProperty)) {
|
|
@@ -44,6 +43,11 @@ export function buildGrammar(definitionObject, startProductionName, options) {
|
|
|
44
43
|
const preparedContent = prepareGrammarElement(nonterminal.content, nonterminalLookup, optionalNonterminalLookup, getNewCacheId);
|
|
45
44
|
nonterminal.content = preparedContent;
|
|
46
45
|
const optionalNonterminal = optionalNonterminalLookup.get(func);
|
|
46
|
+
// The optional wrapper should share the already-resolved content
|
|
47
|
+
// object (which now contains only resolved Nonterminal refs, no
|
|
48
|
+
// NonterminalReferences left). Sharing is safe because optional
|
|
49
|
+
// detection works on canonical identity and nodes are mutated
|
|
50
|
+
// only via the `optional` flag on the wrapper itself.
|
|
47
51
|
optionalNonterminal.content = preparedContent;
|
|
48
52
|
}
|
|
49
53
|
const startNonterminal = nonterminalLookup.get(definitionObject[startProductionName]);
|
|
@@ -120,78 +124,6 @@ function prepareGrammarElement(rootElement, nonterminalLookup, optionalNontermin
|
|
|
120
124
|
return prepare(rootElement);
|
|
121
125
|
}
|
|
122
126
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
123
|
-
// Exported AST builder functions
|
|
124
|
-
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
125
|
-
export function zeroOrMore(content) {
|
|
126
|
-
return {
|
|
127
|
-
type: 'Repetition',
|
|
128
|
-
content: productionToGrammarElement(content),
|
|
129
|
-
optional: true,
|
|
130
|
-
cached: false,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
export function oneOrMore(content) {
|
|
134
|
-
return {
|
|
135
|
-
type: 'Repetition',
|
|
136
|
-
content: productionToGrammarElement(content),
|
|
137
|
-
optional: false,
|
|
138
|
-
cached: false,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
export function anyOf(...members) {
|
|
142
|
-
if (members.length === 0) {
|
|
143
|
-
throw new Error(`'anyOf' requires at least one member.`);
|
|
144
|
-
}
|
|
145
|
-
const normalizedMembers = members.map(member => productionToGrammarElement(member));
|
|
146
|
-
return {
|
|
147
|
-
type: 'Choice',
|
|
148
|
-
members: normalizedMembers,
|
|
149
|
-
optional: false,
|
|
150
|
-
exhaustive: false,
|
|
151
|
-
cached: false,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
export function bestOf(...members) {
|
|
155
|
-
if (members.length === 0) {
|
|
156
|
-
throw new Error(`'bestOf' requires at least one member.`);
|
|
157
|
-
}
|
|
158
|
-
const normalizedMembers = members.map(member => productionToGrammarElement(member));
|
|
159
|
-
return {
|
|
160
|
-
type: 'Choice',
|
|
161
|
-
members: normalizedMembers,
|
|
162
|
-
optional: false,
|
|
163
|
-
exhaustive: true,
|
|
164
|
-
cached: false,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
export function possibly(content) {
|
|
168
|
-
return { ...productionToGrammarElement(content), optional: true };
|
|
169
|
-
}
|
|
170
|
-
export function pattern(pattern) {
|
|
171
|
-
if (isArray(pattern)) {
|
|
172
|
-
pattern = [inputStart, ...pattern];
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
pattern = [inputStart, pattern];
|
|
176
|
-
}
|
|
177
|
-
validatePatternCaptureGroups(pattern);
|
|
178
|
-
const regExp = buildRegExp(pattern);
|
|
179
|
-
const optional = isPatternOptional(pattern);
|
|
180
|
-
return {
|
|
181
|
-
type: 'PatternTerminal',
|
|
182
|
-
pattern,
|
|
183
|
-
regExp,
|
|
184
|
-
optional,
|
|
185
|
-
cached: false,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
export function cached(content) {
|
|
189
|
-
return { ...productionToGrammarElement(content), cached: true };
|
|
190
|
-
}
|
|
191
|
-
export function uncached(content) {
|
|
192
|
-
return { ...productionToGrammarElement(content), cached: false };
|
|
193
|
-
}
|
|
194
|
-
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
195
127
|
// Internal AST builder methods
|
|
196
128
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
197
129
|
function stringTerminal(content) {
|
|
@@ -234,7 +166,7 @@ function unresolvedReference(reference) {
|
|
|
234
166
|
cached: false,
|
|
235
167
|
};
|
|
236
168
|
}
|
|
237
|
-
function productionToGrammarElement(production) {
|
|
169
|
+
export function productionToGrammarElement(production) {
|
|
238
170
|
if (isString(production)) {
|
|
239
171
|
return stringTerminal(production);
|
|
240
172
|
}
|
|
@@ -249,23 +181,4 @@ function productionToGrammarElement(production) {
|
|
|
249
181
|
return production;
|
|
250
182
|
}
|
|
251
183
|
}
|
|
252
|
-
|
|
253
|
-
// Grammar class
|
|
254
|
-
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
255
|
-
export class Grammar {
|
|
256
|
-
productions;
|
|
257
|
-
startProductionName;
|
|
258
|
-
maxCacheId;
|
|
259
|
-
constructor(productions, startProductionName, maxCacheId) {
|
|
260
|
-
this.startProductionName = startProductionName;
|
|
261
|
-
this.productions = productions;
|
|
262
|
-
this.maxCacheId = maxCacheId;
|
|
263
|
-
}
|
|
264
|
-
parse(text) {
|
|
265
|
-
return parse(text, this);
|
|
266
|
-
}
|
|
267
|
-
get rootElement() {
|
|
268
|
-
return this.productions[this.startProductionName];
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
//# sourceMappingURL=Grammar.js.map
|
|
184
|
+
//# sourceMappingURL=Builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Builder.js","sourceRoot":"","sources":["../../src/parser/Builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { Pattern } from 'regexp-composer';
|
|
2
|
-
export declare
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
export declare class Grammar<T> {
|
|
3
|
+
readonly productions: Record<keyof T, any>;
|
|
4
|
+
readonly startProductionName: keyof T;
|
|
5
|
+
readonly maxCacheId: number;
|
|
6
|
+
constructor(productions: Record<keyof T, any>, startProductionName: keyof T, maxCacheId: number);
|
|
7
|
+
parse(text: string): import("./Parser.js").ParseTreeNode[];
|
|
8
|
+
get rootElement(): Record<keyof T, any>[keyof T];
|
|
9
|
+
}
|
|
5
10
|
export declare function zeroOrMore(content: Production): Repetition;
|
|
6
11
|
export declare function oneOrMore(content: Production): Repetition;
|
|
7
12
|
export declare function anyOf(...members: Production[]): Choice;
|
|
@@ -10,14 +15,6 @@ export declare function possibly<T extends Production>(content: Production): T;
|
|
|
10
15
|
export declare function pattern(pattern: Pattern): PatternTerminal;
|
|
11
16
|
export declare function cached<T extends Production>(content: Production): T;
|
|
12
17
|
export declare function uncached<T extends Production>(content: Production): T;
|
|
13
|
-
export declare class Grammar<T> {
|
|
14
|
-
readonly productions: Record<keyof T, any>;
|
|
15
|
-
readonly startProductionName: keyof T;
|
|
16
|
-
readonly maxCacheId: number;
|
|
17
|
-
constructor(productions: Record<keyof T, any>, startProductionName: keyof T, maxCacheId: number);
|
|
18
|
-
parse(text: string): import("./TopDownParser.js").ParseTreeNode[];
|
|
19
|
-
get rootElement(): any;
|
|
20
|
-
}
|
|
21
18
|
export type Production = string | GrammarElement | (() => Production) | Production[];
|
|
22
19
|
export type GrammarElement = StringTerminal | PatternTerminal | Nonterminal | Sequence | Repetition | Choice | NonterminalReference;
|
|
23
20
|
interface GrammarElementBase {
|
|
@@ -61,9 +58,5 @@ export interface NonterminalReference extends GrammarElementBase {
|
|
|
61
58
|
type: 'NonterminalReference';
|
|
62
59
|
reference: Function;
|
|
63
60
|
}
|
|
64
|
-
export interface GrammarBuilderOptions<T> {
|
|
65
|
-
unwrappedNonterminalNames?: GrammarNonterminalNames<T>;
|
|
66
|
-
}
|
|
67
|
-
export type GrammarNonterminalNames<T> = (keyof T)[];
|
|
68
61
|
export {};
|
|
69
62
|
//# sourceMappingURL=Grammar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grammar.d.ts","sourceRoot":"","sources":["../../src/parser/Grammar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { buildRegExp, inputStart, isPatternOptional } from 'regexp-composer';
|
|
2
|
+
import { isArray } from '../utilities/Utilities.js';
|
|
3
|
+
import { parse } from './Parser.js';
|
|
4
|
+
import { validatePatternCaptureGroups } from './StaticAnalysis.js';
|
|
5
|
+
import { productionToGrammarElement } from './Builder.js';
|
|
6
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
7
|
+
// Grammar class
|
|
8
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
9
|
+
export class Grammar {
|
|
10
|
+
productions;
|
|
11
|
+
startProductionName;
|
|
12
|
+
maxCacheId;
|
|
13
|
+
constructor(productions, startProductionName, maxCacheId) {
|
|
14
|
+
this.startProductionName = startProductionName;
|
|
15
|
+
this.productions = productions;
|
|
16
|
+
this.maxCacheId = maxCacheId;
|
|
17
|
+
}
|
|
18
|
+
parse(text) {
|
|
19
|
+
return parse(text, this);
|
|
20
|
+
}
|
|
21
|
+
get rootElement() {
|
|
22
|
+
return this.productions[this.startProductionName];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
26
|
+
// Exported grammar builder functions
|
|
27
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
28
|
+
export function zeroOrMore(content) {
|
|
29
|
+
return {
|
|
30
|
+
type: 'Repetition',
|
|
31
|
+
content: productionToGrammarElement(content),
|
|
32
|
+
optional: true,
|
|
33
|
+
cached: false,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function oneOrMore(content) {
|
|
37
|
+
return {
|
|
38
|
+
type: 'Repetition',
|
|
39
|
+
content: productionToGrammarElement(content),
|
|
40
|
+
optional: false,
|
|
41
|
+
cached: false,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function anyOf(...members) {
|
|
45
|
+
if (members.length === 0) {
|
|
46
|
+
throw new Error(`'anyOf' requires at least one member.`);
|
|
47
|
+
}
|
|
48
|
+
const normalizedMembers = members.map(member => productionToGrammarElement(member));
|
|
49
|
+
return {
|
|
50
|
+
type: 'Choice',
|
|
51
|
+
members: normalizedMembers,
|
|
52
|
+
optional: false,
|
|
53
|
+
exhaustive: false,
|
|
54
|
+
cached: false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function bestOf(...members) {
|
|
58
|
+
if (members.length === 0) {
|
|
59
|
+
throw new Error(`'bestOf' requires at least one member.`);
|
|
60
|
+
}
|
|
61
|
+
const normalizedMembers = members.map(member => productionToGrammarElement(member));
|
|
62
|
+
return {
|
|
63
|
+
type: 'Choice',
|
|
64
|
+
members: normalizedMembers,
|
|
65
|
+
optional: false,
|
|
66
|
+
exhaustive: true,
|
|
67
|
+
cached: false,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function possibly(content) {
|
|
71
|
+
return { ...productionToGrammarElement(content), optional: true };
|
|
72
|
+
}
|
|
73
|
+
export function pattern(pattern) {
|
|
74
|
+
if (isArray(pattern)) {
|
|
75
|
+
pattern = [inputStart, ...pattern];
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
pattern = [inputStart, pattern];
|
|
79
|
+
}
|
|
80
|
+
validatePatternCaptureGroups(pattern);
|
|
81
|
+
const regExp = buildRegExp(pattern);
|
|
82
|
+
const optional = isPatternOptional(pattern);
|
|
83
|
+
return {
|
|
84
|
+
type: 'PatternTerminal',
|
|
85
|
+
pattern,
|
|
86
|
+
regExp,
|
|
87
|
+
optional,
|
|
88
|
+
cached: false,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function cached(content) {
|
|
92
|
+
return { ...productionToGrammarElement(content), cached: true };
|
|
93
|
+
}
|
|
94
|
+
export function uncached(content) {
|
|
95
|
+
return { ...productionToGrammarElement(content), cached: false };
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=Grammar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Grammar.js","sourceRoot":"","sources":["../../src/parser/Grammar.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,6 @@ export declare class ParseError extends Error {
|
|
|
12
12
|
static createIncompleteParseError(input: string, offset: number, parsedLength: number): ParseError;
|
|
13
13
|
}
|
|
14
14
|
export declare function analyzeFailedMatches(failedMatches: FailedMatch[]): FailedMatchAnalysisResult;
|
|
15
|
-
export declare function findCommonProductionPrefix(productionStacks: Nonterminal[][]): Nonterminal[];
|
|
16
|
-
export declare function formatErrorContext(input: string, offset: number, maxDisplayedLineLength: number): string;
|
|
17
15
|
interface FailedMatchAnalysisResult {
|
|
18
16
|
expected: ExpectedTerminal[];
|
|
19
17
|
contextProduction: Nonterminal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParseError.d.ts","sourceRoot":"","sources":["../../src/parser/ParseError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAOzD,qBAAa,UAAW,SAAQ,KAAK;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IAEtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IAE/C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAEnC,YAAY,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,SAAM,EAsBnE;IAID,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,UAAU,CASzG;IAID,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAEjG;CACD;AASD,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,yBAAyB,CAiD5F;AAiOD,UAAU,yBAAyB;IAClC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,iBAAiB,EAAE,WAAW,CAAA;CAC9B;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,eAAe,EAAE,WAAW,EAAE,CAAA;CAC9B;AAGD,MAAM,WAAW,gBAAgB;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IAEd,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB"}
|
|
@@ -89,14 +89,18 @@ export function analyzeFailedMatches(failedMatches) {
|
|
|
89
89
|
// A candidate is redundant when the same terminal is also expected by a deeper
|
|
90
90
|
// production within the same context, i.e. when another candidate's production
|
|
91
91
|
// appears below this candidate's production in its own stack.
|
|
92
|
+
//
|
|
93
|
+
// Compare within the other candidate's own stack: if there exists another
|
|
94
|
+
// candidate `other` such that `candidate` is an ancestor of `other` in
|
|
95
|
+
// `other`'s stack, keep only `other` (innermost).
|
|
92
96
|
function isRedundantCandidate(candidate, candidates) {
|
|
93
|
-
const candidateIndex = stackIndexOf(candidate.productionStack, candidate.production);
|
|
94
97
|
for (const other of candidates) {
|
|
95
98
|
if (other === candidate) {
|
|
96
99
|
continue;
|
|
97
100
|
}
|
|
98
|
-
const
|
|
99
|
-
|
|
101
|
+
const candidateIndexInOther = stackIndexOf(other.productionStack, candidate.production);
|
|
102
|
+
const otherIndexInOther = stackIndexOf(other.productionStack, other.production);
|
|
103
|
+
if (candidateIndexInOther !== -1 && otherIndexInOther !== -1 && otherIndexInOther > candidateIndexInOther) {
|
|
100
104
|
return true;
|
|
101
105
|
}
|
|
102
106
|
}
|
|
@@ -108,14 +112,37 @@ function stackIndexOf(productionStack, production) {
|
|
|
108
112
|
const canonical = production.grammarNonterminal ?? production;
|
|
109
113
|
return productionStack.findIndex(nonterminal => (nonterminal.grammarNonterminal ?? nonterminal) === canonical);
|
|
110
114
|
}
|
|
115
|
+
function areTerminalsEqual(a, b) {
|
|
116
|
+
if (a === b) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
if (a?.type !== b?.type) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
if (a.type === 'StringTerminal') {
|
|
123
|
+
return a.content === b.content;
|
|
124
|
+
}
|
|
125
|
+
if (a.type === 'PatternTerminal') {
|
|
126
|
+
return a.regExp.source === b.regExp.source && a.regExp.flags === b.regExp.flags;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
111
130
|
function stringifyFailedTerminal(failedMatch) {
|
|
112
131
|
const { terminal, productionStack } = failedMatch;
|
|
113
132
|
if (terminal.name !== undefined) {
|
|
114
133
|
return terminal.name;
|
|
115
134
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
135
|
+
// Compare terminals by structural identity: PatternTerminals are
|
|
136
|
+
// reconstructed objects, StringTerminals are cloned, so object
|
|
137
|
+
// identity vs innermostProduction.content is not reliable.
|
|
138
|
+
//
|
|
139
|
+
// Instead check if the failed terminal equals the content of any
|
|
140
|
+
// production in the stack by value.
|
|
141
|
+
for (let i = productionStack.length - 1; i >= 0; i--) {
|
|
142
|
+
const production = productionStack[i];
|
|
143
|
+
if (areTerminalsEqual(production.content, terminal)) {
|
|
144
|
+
return production.name;
|
|
145
|
+
}
|
|
119
146
|
}
|
|
120
147
|
const stringifiedLengthLimit = 100;
|
|
121
148
|
const terminalToText = new TerminalToText(stringifiedLengthLimit);
|
|
@@ -129,7 +156,7 @@ function stringifyFailedTerminal(failedMatch) {
|
|
|
129
156
|
// during a single parse: the grammar builder creates spread copies of the canonical
|
|
130
157
|
// nonterminal for optional references and for references wrapped in cached(). Each clone
|
|
131
158
|
// keeps a reference to the original in 'grammarNonterminal'.
|
|
132
|
-
|
|
159
|
+
function findCommonProductionPrefix(productionStacks) {
|
|
133
160
|
if (productionStacks.length === 0) {
|
|
134
161
|
return [];
|
|
135
162
|
}
|
|
@@ -185,7 +212,7 @@ function buildExpectedGroupsMessage(expected) {
|
|
|
185
212
|
.map(([productionName, stringifiedTerminals]) => `In '${productionName}': ${stringifiedTerminals.join(', ')}`)
|
|
186
213
|
.join('\n\n');
|
|
187
214
|
}
|
|
188
|
-
|
|
215
|
+
function formatErrorContext(input, offset, maxDisplayedLineLength) {
|
|
189
216
|
const { line, column } = getLineAndColumn(input, offset);
|
|
190
217
|
let lineStartOffset = offset;
|
|
191
218
|
while (lineStartOffset > 0 && input[lineStartOffset - 1] !== '\n') {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParseError.js","sourceRoot":"","sources":["../../src/parser/ParseError.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Grammar } from './Grammar.js';
|
|
2
|
-
export declare function parse(inputString: string, grammar: Grammar<any>, options?:
|
|
2
|
+
export declare function parse(inputString: string, grammar: Grammar<any>, options?: ParserOptions): ParseTreeNode[];
|
|
3
3
|
export interface ParseResult {
|
|
4
4
|
endOffset: number;
|
|
5
5
|
nodes: ParseTreeNode[] | undefined;
|
|
6
|
+
skipped?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export interface ParseTreeNode {
|
|
8
9
|
name: string;
|
|
@@ -11,6 +12,6 @@ export interface ParseTreeNode {
|
|
|
11
12
|
sourceText: string;
|
|
12
13
|
children?: ParseTreeNode[];
|
|
13
14
|
}
|
|
14
|
-
export interface
|
|
15
|
+
export interface ParserOptions {
|
|
15
16
|
}
|
|
16
|
-
//# sourceMappingURL=
|
|
17
|
+
//# sourceMappingURL=Parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../src/parser/Parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA8C,MAAM,cAAc,CAAA;AAMlF,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,mBAuUxF;AAKD,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,aAAa,EAAE,GAAG,SAAS,CAAA;IAMlC,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAA;IAEZ,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IAEjB,UAAU,EAAE,MAAM,CAAA;IAElB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;CAC7B"}
|
|
@@ -9,7 +9,7 @@ export function parse(inputString, grammar, options) {
|
|
|
9
9
|
const nonterminalStack = [];
|
|
10
10
|
let bestFailedMatches = [];
|
|
11
11
|
let bestFailedMatchesOffset = -1;
|
|
12
|
-
const cacheKeyOffsetMultiplier = grammar.maxCacheId + 1;
|
|
12
|
+
const cacheKeyOffsetMultiplier = grammar.maxCacheId > 0 ? grammar.maxCacheId + 1 : 1;
|
|
13
13
|
const parseResultsCache = new Map();
|
|
14
14
|
function updateBestFailedMatchesIfNeeded(terminal, startOffset) {
|
|
15
15
|
if (startOffset >= bestFailedMatchesOffset) {
|
|
@@ -47,6 +47,18 @@ export function parse(inputString, grammar, options) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
function tryParseUncached(grammarElement, startOffset) {
|
|
50
|
+
const result = tryParseElement(grammarElement, startOffset);
|
|
51
|
+
if (result === null && grammarElement.optional === true) {
|
|
52
|
+
// An optional element that doesn't match is "skipped": it succeeds
|
|
53
|
+
// by consuming no input and producing no nodes. This uniformly
|
|
54
|
+
// implements the `possibly()` "or skip" semantics wherever the
|
|
55
|
+
// element appears (sequence members, repetition content, choice
|
|
56
|
+
// members, or as the content of a production itself).
|
|
57
|
+
return { endOffset: startOffset, nodes: undefined, skipped: true };
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
function tryParseElement(grammarElement, startOffset) {
|
|
50
62
|
switch (grammarElement.type) {
|
|
51
63
|
case 'StringTerminal': {
|
|
52
64
|
const target = grammarElement.content;
|
|
@@ -79,11 +91,26 @@ export function parse(inputString, grammar, options) {
|
|
|
79
91
|
let nodes = undefined;
|
|
80
92
|
const groupsIndices = matchResults.indices;
|
|
81
93
|
if (groupsIndices !== undefined) {
|
|
82
|
-
|
|
94
|
+
const children = [];
|
|
95
|
+
// Build a reverse lookup from indices entry -> group name by identity.
|
|
96
|
+
// This is robust even when some groups do not participate (undefined)
|
|
97
|
+
// and avoids relying on Object.keys order aligning with numeric indices.
|
|
98
|
+
let indexToName = undefined;
|
|
83
99
|
if (groupsIndices.groups) {
|
|
84
|
-
|
|
100
|
+
indexToName = new Array(groupsIndices.length);
|
|
101
|
+
for (const [name, range] of Object.entries(groupsIndices.groups)) {
|
|
102
|
+
if (range === undefined) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// `range` is the same array instance as groupsIndices[index]
|
|
106
|
+
const index = groupsIndices.indexOf(range);
|
|
107
|
+
if (index >= 0) {
|
|
108
|
+
indexToName[index] = name;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Mark which indices actually correspond to named groups
|
|
112
|
+
// (validatePatternCaptureGroups guarantees all-or-nothing, but be defensive)
|
|
85
113
|
}
|
|
86
|
-
const children = [];
|
|
87
114
|
for (let i = 1; i < groupsIndices.length; i++) {
|
|
88
115
|
const groupIndices = groupsIndices[i];
|
|
89
116
|
if (groupIndices === undefined) {
|
|
@@ -91,8 +118,9 @@ export function parse(inputString, grammar, options) {
|
|
|
91
118
|
}
|
|
92
119
|
const groupStartOffset = startOffset + groupIndices[0];
|
|
93
120
|
const groupEndOffset = startOffset + groupIndices[1];
|
|
121
|
+
const name = indexToName?.[i] ?? i.toString();
|
|
94
122
|
children.push({
|
|
95
|
-
name
|
|
123
|
+
name,
|
|
96
124
|
startOffset: groupStartOffset,
|
|
97
125
|
endOffset: groupEndOffset,
|
|
98
126
|
sourceText: inputString.substring(groupStartOffset, groupEndOffset),
|
|
@@ -114,6 +142,12 @@ export function parse(inputString, grammar, options) {
|
|
|
114
142
|
if (result === null) {
|
|
115
143
|
return null;
|
|
116
144
|
}
|
|
145
|
+
if (result.skipped === true) {
|
|
146
|
+
// The content was skipped (it was optional and didn't match),
|
|
147
|
+
// so no node should be created for this nonterminal either,
|
|
148
|
+
// and the skip is propagated to the parent.
|
|
149
|
+
return { endOffset: startOffset, nodes: undefined, skipped: true };
|
|
150
|
+
}
|
|
117
151
|
const grammarElementName = grammarElement.name;
|
|
118
152
|
if (grammarElement.unwrapped) {
|
|
119
153
|
const newResult = {
|
|
@@ -227,4 +261,4 @@ export function parse(inputString, grammar, options) {
|
|
|
227
261
|
}
|
|
228
262
|
}
|
|
229
263
|
}
|
|
230
|
-
//# sourceMappingURL=
|
|
264
|
+
//# sourceMappingURL=Parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../src/parser/Parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticAnalysis.d.ts","sourceRoot":"","sources":["../../src/parser/StaticAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAK7C,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,cAAc,QAqMtE;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,cAAc,QAmDrE;AAWD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiFnE"}
|