grammar-composer 0.3.1 → 0.5.0
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/README.md +144 -89
- package/dist/exports/Exports.d.ts +2 -0
- package/dist/exports/Exports.d.ts.map +1 -1
- package/dist/exports/Exports.js +2 -0
- package/dist/exports/Exports.js.map +1 -1
- package/dist/parser-generator/Grammar.d.ts +12 -5
- package/dist/parser-generator/Grammar.d.ts.map +1 -1
- package/dist/parser-generator/Grammar.js +81 -263
- package/dist/parser-generator/Grammar.js.map +1 -1
- package/dist/parser-generator/ParseError.d.ts +37 -0
- package/dist/parser-generator/ParseError.d.ts.map +1 -0
- package/dist/parser-generator/ParseError.js +226 -0
- package/dist/parser-generator/ParseError.js.map +1 -0
- package/dist/parser-generator/StaticAnalysis.d.ts +6 -0
- package/dist/parser-generator/StaticAnalysis.d.ts.map +1 -0
- package/dist/parser-generator/StaticAnalysis.js +283 -0
- package/dist/parser-generator/StaticAnalysis.js.map +1 -0
- package/dist/parser-generator/TerminalToText.d.ts +15 -0
- package/dist/parser-generator/TerminalToText.d.ts.map +1 -0
- package/dist/parser-generator/TerminalToText.js +158 -0
- package/dist/parser-generator/TerminalToText.js.map +1 -0
- package/dist/parser-generator/TopDownParser.d.ts +4 -2
- package/dist/parser-generator/TopDownParser.d.ts.map +1 -1
- package/dist/parser-generator/TopDownParser.js +52 -52
- package/dist/parser-generator/TopDownParser.js.map +1 -1
- package/dist/tests/Test.js +36 -26
- package/dist/tests/Test.js.map +1 -1
- package/dist/tests/test-grammars/JsonGrammar.d.ts +12 -11
- package/dist/tests/test-grammars/JsonGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/JsonGrammar.js +25 -10
- package/dist/tests/test-grammars/JsonGrammar.js.map +1 -1
- package/dist/tests/test-grammars/RegExpGrammar.d.ts +34 -28
- package/dist/tests/test-grammars/RegExpGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/RegExpGrammar.js +104 -60
- package/dist/tests/test-grammars/RegExpGrammar.js.map +1 -1
- package/dist/tests/test-grammars/SimpleTestGrammar1.d.ts +5 -0
- package/dist/tests/test-grammars/SimpleTestGrammar1.d.ts.map +1 -0
- package/dist/tests/test-grammars/SimpleTestGrammar1.js +7 -0
- package/dist/tests/test-grammars/SimpleTestGrammar1.js.map +1 -0
- package/dist/tests/test-grammars/XmlGrammar.d.ts +11 -10
- package/dist/tests/test-grammars/XmlGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/XmlGrammar.js +19 -8
- package/dist/tests/test-grammars/XmlGrammar.js.map +1 -1
- package/dist/utilities/LineAndColumn.d.ts +7 -0
- package/dist/utilities/LineAndColumn.d.ts.map +1 -0
- package/dist/utilities/LineAndColumn.js +52 -0
- package/dist/utilities/LineAndColumn.js.map +1 -0
- package/dist/utilities/Utilities.d.ts +7 -7
- package/dist/utilities/Utilities.d.ts.map +1 -1
- package/dist/utilities/Utilities.js.map +1 -1
- package/package.json +2 -2
- package/src/exports/Exports.ts +2 -0
- package/src/parser-generator/Grammar.ts +120 -308
- package/src/parser-generator/ParseError.ts +337 -0
- package/src/parser-generator/StaticAnalysis.ts +340 -0
- package/src/parser-generator/TerminalToText.ts +196 -0
- package/src/parser-generator/TopDownParser.ts +76 -64
- package/src/tests/Test.ts +44 -28
- package/src/tests/test-grammars/JsonGrammar.ts +28 -10
- package/src/tests/test-grammars/RegExpGrammar.ts +193 -96
- package/src/tests/test-grammars/SimpleTestGrammar1.ts +10 -0
- package/src/tests/test-grammars/XmlGrammar.ts +20 -8
- package/src/utilities/LineAndColumn.ts +61 -0
- package/src/utilities/Utilities.ts +7 -7
|
@@ -1,38 +1,52 @@
|
|
|
1
1
|
import { buildRegExp, inputStart, isPatternOptional } from 'regexp-composer';
|
|
2
|
-
import { isArray,
|
|
2
|
+
import { isArray, isFunction, isString } from '../utilities/Utilities.js';
|
|
3
3
|
import { parse } from './TopDownParser.js';
|
|
4
|
+
import { detectAndAnnotateOptionalNodes, detectAndErrorOnLeftRecursion, validatePatternCaptureGroups } from './StaticAnalysis.js';
|
|
4
5
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
5
6
|
// Grammar builder method
|
|
6
7
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
7
|
-
export function buildGrammar(
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
export function buildGrammar(definitionObject, startProductionName, options) {
|
|
9
|
+
options = {
|
|
10
|
+
unwrappedNonterminalNames: [],
|
|
11
|
+
...options
|
|
12
|
+
};
|
|
13
|
+
if (isFunction(definitionObject)) {
|
|
14
|
+
definitionObject = new definitionObject();
|
|
10
15
|
}
|
|
11
16
|
const nameLookup = new Map();
|
|
12
17
|
const nonterminalLookup = new Map();
|
|
13
18
|
const optionalNonterminalLookup = new Map();
|
|
14
|
-
for (const key in
|
|
15
|
-
const objectProperty =
|
|
19
|
+
for (const key in definitionObject) {
|
|
20
|
+
const objectProperty = definitionObject[key];
|
|
16
21
|
nameLookup.set(objectProperty, key);
|
|
17
22
|
if (!isFunction(objectProperty)) {
|
|
18
|
-
|
|
23
|
+
throw new Error(`Grammar definition contains a property '${key}', which is not a function. All object properties must be productions, declared as functions.`);
|
|
19
24
|
}
|
|
20
|
-
const productionContent = objectProperty.call(
|
|
25
|
+
const productionContent = objectProperty.call(definitionObject);
|
|
21
26
|
const normalizedProduction = productionToGrammarElement(productionContent);
|
|
22
|
-
const
|
|
23
|
-
const
|
|
27
|
+
const isUnwrappedNonterminal = options.unwrappedNonterminalNames?.includes(key) === true;
|
|
28
|
+
const newNonterminal = nonterminal(key, normalizedProduction, isUnwrappedNonterminal);
|
|
29
|
+
const newOptionalNonterminal = {
|
|
30
|
+
...newNonterminal,
|
|
31
|
+
optional: true,
|
|
32
|
+
grammarNonterminal: newNonterminal,
|
|
33
|
+
};
|
|
24
34
|
nonterminalLookup.set(objectProperty, newNonterminal);
|
|
25
35
|
optionalNonterminalLookup.set(objectProperty, newOptionalNonterminal);
|
|
26
36
|
}
|
|
27
|
-
let
|
|
28
|
-
const
|
|
37
|
+
let cacheIdCounter = 0;
|
|
38
|
+
const getNewCacheId = () => {
|
|
39
|
+
const newCacheId = cacheIdCounter;
|
|
40
|
+
cacheIdCounter += 1;
|
|
41
|
+
return newCacheId;
|
|
42
|
+
};
|
|
29
43
|
for (const [func, nonterminal] of nonterminalLookup) {
|
|
30
|
-
const preparedContent = prepareGrammarElement(nonterminal.content, nonterminalLookup, optionalNonterminalLookup,
|
|
44
|
+
const preparedContent = prepareGrammarElement(nonterminal.content, nonterminalLookup, optionalNonterminalLookup, getNewCacheId);
|
|
31
45
|
nonterminal.content = preparedContent;
|
|
32
46
|
const optionalNonterminal = optionalNonterminalLookup.get(func);
|
|
33
47
|
optionalNonterminal.content = preparedContent;
|
|
34
48
|
}
|
|
35
|
-
const startNonterminal = nonterminalLookup.get(
|
|
49
|
+
const startNonterminal = nonterminalLookup.get(definitionObject[startProductionName]);
|
|
36
50
|
if (!startNonterminal) {
|
|
37
51
|
throw new Error(`Couldn't find a start production named '${startProductionName}'.`);
|
|
38
52
|
}
|
|
@@ -42,38 +56,40 @@ export function buildGrammar(obj, startProductionName) {
|
|
|
42
56
|
for (const [key, nonterminal] of nonterminalLookup) {
|
|
43
57
|
nonterminals[nameLookup.get(key)] = nonterminal;
|
|
44
58
|
}
|
|
45
|
-
return new Grammar(nonterminals, startProductionName,
|
|
59
|
+
return new Grammar(nonterminals, startProductionName, cacheIdCounter);
|
|
46
60
|
}
|
|
47
|
-
function prepareGrammarElement(rootElement, nonterminalLookup, optionalNonterminalLookup,
|
|
61
|
+
function prepareGrammarElement(rootElement, nonterminalLookup, optionalNonterminalLookup, getNewCacheId) {
|
|
48
62
|
function prepare(element) {
|
|
63
|
+
const setCacheIdIfNeeded = (element) => {
|
|
64
|
+
if (element.cached === true) {
|
|
65
|
+
element.cacheId = getNewCacheId();
|
|
66
|
+
}
|
|
67
|
+
return element;
|
|
68
|
+
};
|
|
49
69
|
switch (element.type) {
|
|
50
70
|
case 'StringTerminal':
|
|
51
71
|
case 'Nonterminal': {
|
|
52
|
-
|
|
53
|
-
element
|
|
54
|
-
}
|
|
55
|
-
return element;
|
|
72
|
+
return setCacheIdIfNeeded({
|
|
73
|
+
...element
|
|
74
|
+
});
|
|
56
75
|
}
|
|
57
76
|
case 'PatternTerminal': {
|
|
58
|
-
return {
|
|
77
|
+
return setCacheIdIfNeeded({
|
|
59
78
|
...element,
|
|
60
|
-
|
|
61
|
-
};
|
|
79
|
+
});
|
|
62
80
|
}
|
|
63
81
|
case 'Repetition': {
|
|
64
|
-
return {
|
|
82
|
+
return setCacheIdIfNeeded({
|
|
65
83
|
...element,
|
|
66
84
|
content: prepare(element.content),
|
|
67
|
-
|
|
68
|
-
};
|
|
85
|
+
});
|
|
69
86
|
}
|
|
70
87
|
case 'Sequence':
|
|
71
88
|
case 'Choice': {
|
|
72
|
-
return {
|
|
89
|
+
return setCacheIdIfNeeded({
|
|
73
90
|
...element,
|
|
74
91
|
members: element.members.map(element => prepare(element)),
|
|
75
|
-
|
|
76
|
-
};
|
|
92
|
+
});
|
|
77
93
|
}
|
|
78
94
|
case 'NonterminalReference': {
|
|
79
95
|
const reference = element.reference;
|
|
@@ -87,250 +103,43 @@ function prepareGrammarElement(rootElement, nonterminalLookup, optionalNontermin
|
|
|
87
103
|
if (!nonterminal) {
|
|
88
104
|
throw new Error(`Couldn't resolve function reference in grammar element: ${JSON.stringify(element)}`);
|
|
89
105
|
}
|
|
90
|
-
if (element.cached
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
if (nonterminal.uniqueId === undefined) {
|
|
99
|
-
nonterminal.uniqueId = getUniqueId();
|
|
100
|
-
}
|
|
101
|
-
return nonterminal;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return prepare(rootElement);
|
|
106
|
-
}
|
|
107
|
-
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
108
|
-
// Internal static analysis methods
|
|
109
|
-
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
110
|
-
function detectAndAnnotateOptionalNodes(rootNode) {
|
|
111
|
-
const visitedNodes = new Set();
|
|
112
|
-
const resolvedNodes = new Map();
|
|
113
|
-
const unresolvedNodes = new Map();
|
|
114
|
-
function processDepthFirst(node) {
|
|
115
|
-
if (visitedNodes.has(node)) {
|
|
116
|
-
return resolvedNodes.get(node);
|
|
117
|
-
}
|
|
118
|
-
visitedNodes.add(node);
|
|
119
|
-
switch (node.type) {
|
|
120
|
-
case 'StringTerminal':
|
|
121
|
-
case 'PatternTerminal': {
|
|
122
|
-
resolvedNodes.set(node, node.optional);
|
|
123
|
-
return node.optional;
|
|
124
|
-
}
|
|
125
|
-
case 'Nonterminal':
|
|
126
|
-
case 'Repetition': {
|
|
127
|
-
const result = processDepthFirst(node.content);
|
|
128
|
-
if (node.optional) {
|
|
129
|
-
resolvedNodes.set(node, true);
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
else if (isBoolean(result)) {
|
|
133
|
-
resolvedNodes.set(node, result);
|
|
134
|
-
return result;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
unresolvedNodes.set(node, { dependencies: new Set([node.content]), isChoice: false });
|
|
138
|
-
return undefined;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
case 'Sequence': {
|
|
142
|
-
const dependencies = new Set();
|
|
143
|
-
let hasNonOptionalResolvedMember = false;
|
|
144
|
-
for (const element of node.members) {
|
|
145
|
-
const result = processDepthFirst(element);
|
|
146
|
-
if (isBoolean(result)) {
|
|
147
|
-
if (result === false) {
|
|
148
|
-
hasNonOptionalResolvedMember = true;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
dependencies.add(element);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
if (node.optional == true) {
|
|
156
|
-
resolvedNodes.set(node, true);
|
|
157
|
-
return true;
|
|
158
|
-
}
|
|
159
|
-
else if (hasNonOptionalResolvedMember) {
|
|
160
|
-
resolvedNodes.set(node, false);
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
else if (dependencies.size == 0) {
|
|
164
|
-
resolvedNodes.set(node, true);
|
|
165
|
-
return true;
|
|
106
|
+
if (element.cached === true) {
|
|
107
|
+
return {
|
|
108
|
+
...nonterminal,
|
|
109
|
+
cached: true,
|
|
110
|
+
cacheId: getNewCacheId(),
|
|
111
|
+
grammarNonterminal: nonterminal.grammarNonterminal ?? nonterminal
|
|
112
|
+
};
|
|
166
113
|
}
|
|
167
114
|
else {
|
|
168
|
-
|
|
169
|
-
return undefined;
|
|
115
|
+
return nonterminal;
|
|
170
116
|
}
|
|
171
117
|
}
|
|
172
|
-
case 'Choice': {
|
|
173
|
-
const dependencies = new Set();
|
|
174
|
-
let hasOptionalResolvedMember = false;
|
|
175
|
-
for (const element of node.members) {
|
|
176
|
-
const result = processDepthFirst(element);
|
|
177
|
-
if (isBoolean(result)) {
|
|
178
|
-
if (result === true) {
|
|
179
|
-
hasOptionalResolvedMember = true;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
dependencies.add(element);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (node.optional == true) {
|
|
187
|
-
resolvedNodes.set(node, true);
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
|
-
else if (hasOptionalResolvedMember) {
|
|
191
|
-
resolvedNodes.set(node, true);
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
194
|
-
else if (dependencies.size == 0) {
|
|
195
|
-
resolvedNodes.set(node, false);
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
unresolvedNodes.set(node, { dependencies, isChoice: true });
|
|
200
|
-
return undefined;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return undefined;
|
|
205
|
-
}
|
|
206
|
-
// Process depth first to resolve the easy cases, for productions that contain
|
|
207
|
-
// no cyclic references:
|
|
208
|
-
processDepthFirst(rootNode);
|
|
209
|
-
// Now the remainder consists of nodes containing cyclic references that have not yet been resolved.
|
|
210
|
-
// Use a form of iterative elimination and substitution to resolve them:
|
|
211
|
-
while (unresolvedNodes.size > 0) {
|
|
212
|
-
// This variable tracks whether at least one dependency was resolved, in any node.
|
|
213
|
-
// If it stays false, it means that no improvement was made during the iteration,
|
|
214
|
-
// and we should exit the loop.
|
|
215
|
-
let atLastOneDependencyResolvedInAnyNode = false;
|
|
216
|
-
const nodesToDelete = [];
|
|
217
|
-
// Scan the unresolved nodes to locate any new resolved dependencies
|
|
218
|
-
for (const [node, { dependencies, isChoice }] of unresolvedNodes) {
|
|
219
|
-
let nodeResolved = false;
|
|
220
|
-
// Iterate over all unresolved dependencies for the node
|
|
221
|
-
for (const dependency of Array.from(dependencies)) {
|
|
222
|
-
// Check if the dependency has been resolved
|
|
223
|
-
const value = resolvedNodes.get(dependency);
|
|
224
|
-
if (value !== undefined) {
|
|
225
|
-
// If it did, record that some dependencies were resolved
|
|
226
|
-
atLastOneDependencyResolvedInAnyNode = true;
|
|
227
|
-
if (isChoice) {
|
|
228
|
-
if (value === true) {
|
|
229
|
-
resolvedNodes.set(node, true);
|
|
230
|
-
nodeResolved = true;
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
if (value === false) {
|
|
236
|
-
resolvedNodes.set(node, false);
|
|
237
|
-
nodeResolved = true;
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
dependencies.delete(dependency);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
if (nodeResolved) {
|
|
245
|
-
nodesToDelete.push(node);
|
|
246
|
-
}
|
|
247
|
-
else if (dependencies.size === 0) {
|
|
248
|
-
if (isChoice) {
|
|
249
|
-
resolvedNodes.set(node, false);
|
|
250
|
-
}
|
|
251
|
-
else {
|
|
252
|
-
resolvedNodes.set(node, true);
|
|
253
|
-
}
|
|
254
|
-
nodesToDelete.push(node);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
for (const node of nodesToDelete) {
|
|
258
|
-
unresolvedNodes.delete(node);
|
|
259
|
-
}
|
|
260
|
-
// If not even one dependency was eliminated for any node,
|
|
261
|
-
// it means that only mutually cyclic nodes are left unresolved, so exit the loop.
|
|
262
|
-
if (!atLastOneDependencyResolvedInAnyNode) {
|
|
263
|
-
break;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
// All remaining unresolved nodes must now be optional,
|
|
267
|
-
// since they are all mutually cyclic and all their non-cyclic grammar elements are known to be optional.
|
|
268
|
-
for (const node of unresolvedNodes.keys()) {
|
|
269
|
-
resolvedNodes.set(node, true);
|
|
270
|
-
unresolvedNodes.delete(node);
|
|
271
|
-
}
|
|
272
|
-
// Finally set the 'optional' property of all nodes based on the detected values.
|
|
273
|
-
for (const [node, isOptional] of resolvedNodes) {
|
|
274
|
-
node.optional = isOptional;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
function detectAndErrorOnLeftRecursion(rootNode) {
|
|
278
|
-
const currentlyIteratedNodes = new Set();
|
|
279
|
-
function detect(node) {
|
|
280
|
-
if (currentlyIteratedNodes.has(node)) {
|
|
281
|
-
if (node.type === 'Nonterminal') {
|
|
282
|
-
throw new Error(`Detected left recursion for nonterminal '${node.name}'.`);
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
throw new Error(`Detected left recursion for node: ${JSON.stringify(node, undefined, 4)}`);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
currentlyIteratedNodes.add(node);
|
|
289
|
-
switch (node.type) {
|
|
290
|
-
case 'Nonterminal':
|
|
291
|
-
case 'Repetition': {
|
|
292
|
-
detect(node.content);
|
|
293
|
-
break;
|
|
294
|
-
}
|
|
295
|
-
case 'Sequence': {
|
|
296
|
-
for (const member of node.members) {
|
|
297
|
-
detect(member);
|
|
298
|
-
if (!member.optional) {
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
break;
|
|
303
|
-
}
|
|
304
|
-
case 'Choice': {
|
|
305
|
-
for (const member of node.members) {
|
|
306
|
-
detect(member);
|
|
307
|
-
}
|
|
308
|
-
break;
|
|
309
|
-
}
|
|
310
118
|
}
|
|
311
|
-
currentlyIteratedNodes.delete(node);
|
|
312
119
|
}
|
|
313
|
-
|
|
120
|
+
return prepare(rootElement);
|
|
314
121
|
}
|
|
315
122
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
316
|
-
// Exported builder
|
|
123
|
+
// Exported AST builder functions
|
|
317
124
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
318
125
|
export function zeroOrMore(content) {
|
|
319
126
|
return {
|
|
320
127
|
type: 'Repetition',
|
|
321
128
|
content: productionToGrammarElement(content),
|
|
322
|
-
optional: true
|
|
129
|
+
optional: true,
|
|
130
|
+
cached: false,
|
|
323
131
|
};
|
|
324
132
|
}
|
|
325
133
|
export function oneOrMore(content) {
|
|
326
134
|
return {
|
|
327
135
|
type: 'Repetition',
|
|
328
136
|
content: productionToGrammarElement(content),
|
|
329
|
-
optional: false
|
|
137
|
+
optional: false,
|
|
138
|
+
cached: false,
|
|
330
139
|
};
|
|
331
140
|
}
|
|
332
141
|
export function anyOf(...members) {
|
|
333
|
-
if (members.length
|
|
142
|
+
if (members.length === 0) {
|
|
334
143
|
throw new Error(`'anyOf' requires at least one member.`);
|
|
335
144
|
}
|
|
336
145
|
const normalizedMembers = members.map(member => productionToGrammarElement(member));
|
|
@@ -338,11 +147,12 @@ export function anyOf(...members) {
|
|
|
338
147
|
type: 'Choice',
|
|
339
148
|
members: normalizedMembers,
|
|
340
149
|
optional: false,
|
|
341
|
-
exhaustive: false
|
|
150
|
+
exhaustive: false,
|
|
151
|
+
cached: false,
|
|
342
152
|
};
|
|
343
153
|
}
|
|
344
154
|
export function bestOf(...members) {
|
|
345
|
-
if (members.length
|
|
155
|
+
if (members.length === 0) {
|
|
346
156
|
throw new Error(`'bestOf' requires at least one member.`);
|
|
347
157
|
}
|
|
348
158
|
const normalizedMembers = members.map(member => productionToGrammarElement(member));
|
|
@@ -350,7 +160,8 @@ export function bestOf(...members) {
|
|
|
350
160
|
type: 'Choice',
|
|
351
161
|
members: normalizedMembers,
|
|
352
162
|
optional: false,
|
|
353
|
-
exhaustive: true
|
|
163
|
+
exhaustive: true,
|
|
164
|
+
cached: false,
|
|
354
165
|
};
|
|
355
166
|
}
|
|
356
167
|
export function possibly(content) {
|
|
@@ -363,6 +174,7 @@ export function pattern(pattern) {
|
|
|
363
174
|
else {
|
|
364
175
|
pattern = [inputStart, pattern];
|
|
365
176
|
}
|
|
177
|
+
validatePatternCaptureGroups(pattern);
|
|
366
178
|
const regExp = buildRegExp(pattern);
|
|
367
179
|
const optional = isPatternOptional(pattern);
|
|
368
180
|
return {
|
|
@@ -370,6 +182,7 @@ export function pattern(pattern) {
|
|
|
370
182
|
pattern,
|
|
371
183
|
regExp,
|
|
372
184
|
optional,
|
|
185
|
+
cached: false,
|
|
373
186
|
};
|
|
374
187
|
}
|
|
375
188
|
export function cached(content) {
|
|
@@ -379,7 +192,7 @@ export function uncached(content) {
|
|
|
379
192
|
return { ...productionToGrammarElement(content), cached: false };
|
|
380
193
|
}
|
|
381
194
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
382
|
-
// Internal builder methods
|
|
195
|
+
// Internal AST builder methods
|
|
383
196
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
384
197
|
function stringTerminal(content) {
|
|
385
198
|
if (content.length < 1) {
|
|
@@ -388,10 +201,11 @@ function stringTerminal(content) {
|
|
|
388
201
|
return {
|
|
389
202
|
type: 'StringTerminal',
|
|
390
203
|
content,
|
|
391
|
-
optional: false
|
|
204
|
+
optional: false,
|
|
205
|
+
cached: false,
|
|
392
206
|
};
|
|
393
207
|
}
|
|
394
|
-
function nonterminal(name, content) {
|
|
208
|
+
function nonterminal(name, content, unwrapped) {
|
|
395
209
|
if (name.length < 1) {
|
|
396
210
|
throw new Error(`A nonterminal name must include at least 1 character.`);
|
|
397
211
|
}
|
|
@@ -400,20 +214,24 @@ function nonterminal(name, content) {
|
|
|
400
214
|
name,
|
|
401
215
|
content,
|
|
402
216
|
optional: false,
|
|
217
|
+
cached: false,
|
|
218
|
+
unwrapped,
|
|
403
219
|
};
|
|
404
220
|
}
|
|
405
221
|
function sequence(members) {
|
|
406
222
|
return {
|
|
407
223
|
type: 'Sequence',
|
|
408
224
|
members,
|
|
409
|
-
optional: false
|
|
225
|
+
optional: false,
|
|
226
|
+
cached: false,
|
|
410
227
|
};
|
|
411
228
|
}
|
|
412
229
|
function unresolvedReference(reference) {
|
|
413
230
|
return {
|
|
414
231
|
type: 'NonterminalReference',
|
|
415
232
|
reference,
|
|
416
|
-
optional: false
|
|
233
|
+
optional: false,
|
|
234
|
+
cached: false,
|
|
417
235
|
};
|
|
418
236
|
}
|
|
419
237
|
function productionToGrammarElement(production) {
|
|
@@ -432,16 +250,16 @@ function productionToGrammarElement(production) {
|
|
|
432
250
|
}
|
|
433
251
|
}
|
|
434
252
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
435
|
-
//
|
|
253
|
+
// Grammar class
|
|
436
254
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
437
255
|
export class Grammar {
|
|
438
256
|
productions;
|
|
439
257
|
startProductionName;
|
|
440
|
-
|
|
441
|
-
constructor(productions, startProductionName,
|
|
258
|
+
maxCacheId;
|
|
259
|
+
constructor(productions, startProductionName, maxCacheId) {
|
|
442
260
|
this.startProductionName = startProductionName;
|
|
443
261
|
this.productions = productions;
|
|
444
|
-
this.
|
|
262
|
+
this.maxCacheId = maxCacheId;
|
|
445
263
|
}
|
|
446
264
|
parse(text) {
|
|
447
265
|
return parse(text, this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grammar.js","sourceRoot":"","sources":["../../src/parser-generator/Grammar.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Grammar.js","sourceRoot":"","sources":["../../src/parser-generator/Grammar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Nonterminal, Terminal } from './Grammar.js';
|
|
2
|
+
export declare class ParseError extends Error {
|
|
3
|
+
readonly input: string;
|
|
4
|
+
readonly offset: number;
|
|
5
|
+
readonly line: number;
|
|
6
|
+
readonly column: number;
|
|
7
|
+
readonly found?: string;
|
|
8
|
+
readonly expected?: readonly ExpectedTerminal[];
|
|
9
|
+
readonly contextProduction?: string;
|
|
10
|
+
constructor(details: ParseErrorDetails, maxDisplayedLineLength?: number);
|
|
11
|
+
static createFailedParseError(input: string, offset: number, bestFailedMatches: FailedMatch[]): ParseError;
|
|
12
|
+
static createIncompleteParseError(input: string, offset: number, parsedLength: number): ParseError;
|
|
13
|
+
}
|
|
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
|
+
interface FailedMatchAnalysisResult {
|
|
18
|
+
expected: ExpectedTerminal[];
|
|
19
|
+
contextProduction: Nonterminal;
|
|
20
|
+
}
|
|
21
|
+
export interface FailedMatch {
|
|
22
|
+
terminal: Terminal;
|
|
23
|
+
productionStack: Nonterminal[];
|
|
24
|
+
}
|
|
25
|
+
export interface ExpectedTerminal {
|
|
26
|
+
productionName: string;
|
|
27
|
+
terminalString: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ParseErrorDetails {
|
|
30
|
+
input: string;
|
|
31
|
+
offset: number;
|
|
32
|
+
expected?: readonly ExpectedTerminal[];
|
|
33
|
+
contextProductionName?: string;
|
|
34
|
+
parsedLength?: number;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=ParseError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParseError.d.ts","sourceRoot":"","sources":["../../src/parser-generator/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;AA2DD,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE,CA0B3F;AAiDD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,GAAG,MAAM,CAkDxG;AAUD,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"}
|