grammar-composer 0.6.0 → 0.6.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.
Files changed (55) hide show
  1. package/dist/exports/Exports.d.ts +4 -3
  2. package/dist/exports/Exports.d.ts.map +1 -1
  3. package/dist/exports/Exports.js +4 -3
  4. package/dist/exports/Exports.js.map +1 -1
  5. package/dist/parser/Builder.d.ts +11 -0
  6. package/dist/parser/Builder.d.ts.map +1 -0
  7. package/dist/{parser-generator/Grammar.js → parser/Builder.js} +10 -97
  8. package/dist/parser/Builder.js.map +1 -0
  9. package/dist/{parser-generator → parser}/Grammar.d.ts +8 -15
  10. package/dist/parser/Grammar.d.ts.map +1 -0
  11. package/dist/parser/Grammar.js +97 -0
  12. package/dist/parser/Grammar.js.map +1 -0
  13. package/dist/{parser-generator → parser}/ParseError.d.ts +0 -2
  14. package/dist/parser/ParseError.d.ts.map +1 -0
  15. package/dist/{parser-generator → parser}/ParseError.js +35 -8
  16. package/dist/parser/ParseError.js.map +1 -0
  17. package/dist/{parser-generator/TopDownParser.d.ts → parser/Parser.d.ts} +4 -3
  18. package/dist/parser/Parser.d.ts.map +1 -0
  19. package/dist/{parser-generator/TopDownParser.js → parser/Parser.js} +40 -6
  20. package/dist/parser/Parser.js.map +1 -0
  21. package/dist/parser/StaticAnalysis.d.ts.map +1 -0
  22. package/dist/{parser-generator → parser}/StaticAnalysis.js +16 -5
  23. package/dist/parser/StaticAnalysis.js.map +1 -0
  24. package/dist/parser/TerminalToText.d.ts.map +1 -0
  25. package/dist/{parser-generator → parser}/TerminalToText.js +1 -1
  26. package/dist/parser/TerminalToText.js.map +1 -0
  27. package/dist/tests/Test.js +2 -2
  28. package/dist/tests/Test.js.map +1 -1
  29. package/dist/utilities/Utilities.d.ts +2 -0
  30. package/dist/utilities/Utilities.d.ts.map +1 -1
  31. package/dist/utilities/Utilities.js +15 -1
  32. package/dist/utilities/Utilities.js.map +1 -1
  33. package/package.json +6 -4
  34. package/src/exports/Exports.ts +4 -3
  35. package/src/{parser-generator/Grammar.ts → parser/Builder.ts} +14 -191
  36. package/src/parser/Grammar.ts +194 -0
  37. package/src/{parser-generator → parser}/ParseError.ts +42 -11
  38. package/src/{parser-generator/TopDownParser.ts → parser/Parser.ts} +59 -10
  39. package/src/{parser-generator → parser}/StaticAnalysis.ts +17 -7
  40. package/src/{parser-generator → parser}/TerminalToText.ts +1 -1
  41. package/src/tests/Test.ts +2 -2
  42. package/src/utilities/Utilities.ts +21 -1
  43. package/tsconfig.json +51 -53
  44. package/dist/parser-generator/Grammar.d.ts.map +0 -1
  45. package/dist/parser-generator/Grammar.js.map +0 -1
  46. package/dist/parser-generator/ParseError.d.ts.map +0 -1
  47. package/dist/parser-generator/ParseError.js.map +0 -1
  48. package/dist/parser-generator/StaticAnalysis.d.ts.map +0 -1
  49. package/dist/parser-generator/StaticAnalysis.js.map +0 -1
  50. package/dist/parser-generator/TerminalToText.d.ts.map +0 -1
  51. package/dist/parser-generator/TerminalToText.js.map +0 -1
  52. package/dist/parser-generator/TopDownParser.d.ts.map +0 -1
  53. package/dist/parser-generator/TopDownParser.js.map +0 -1
  54. /package/dist/{parser-generator → parser}/StaticAnalysis.d.ts +0 -0
  55. /package/dist/{parser-generator → parser}/TerminalToText.d.ts +0 -0
@@ -1,4 +1,5 @@
1
- export * from '../parser-generator/Grammar.js';
2
- export { ParseError } from '../parser-generator/ParseError.js';
3
- export * from '../parser-generator/TopDownParser.js';
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,gCAAgC,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAC9D,cAAc,sCAAsC,CAAA"}
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"}
@@ -1,4 +1,5 @@
1
- export * from '../parser-generator/Grammar.js';
2
- export { ParseError } from '../parser-generator/ParseError.js';
3
- export * from '../parser-generator/TopDownParser.js';
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,gCAAgC,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAC9D,cAAc,sCAAsC,CAAA"}
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 { parse } from './TopDownParser.js';
4
- import { detectAndAnnotateOptionalNodes, detectAndErrorOnLeftRecursion, validatePatternCaptureGroups } from './StaticAnalysis.js';
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 in definitionObject) {
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 function buildGrammar<T extends {
3
- [key: string]: any;
4
- }>(definitionObject: T | (new () => T), startProductionName: keyof T, options?: GrammarBuilderOptions<T>): Grammar<T>;
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 otherIndex = stackIndexOf(candidate.productionStack, other.production);
99
- if (otherIndex > candidateIndex) {
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
- const innermostProduction = productionStack[productionStack.length - 1];
117
- if (innermostProduction !== undefined && innermostProduction.content === terminal) {
118
- return innermostProduction.name;
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
- export function findCommonProductionPrefix(productionStacks) {
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
- export function formatErrorContext(input, offset, maxDisplayedLineLength) {
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":"AACA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEhE,iGAAiG;AACjG,oBAAoB;AACpB,iGAAiG;AACjG,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC3B,KAAK,CAAQ;IAEb,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,MAAM,CAAQ;IAEd,KAAK,CAAS;IACd,QAAQ,CAA8B;IAEtC,iBAAiB,CAAS;IAEnC,YAAY,OAA0B,EAAE,sBAAsB,GAAG,GAAG;QACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAExE,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAA;QAErF,KAAK,CAAC,YAAY,CAAC,CAAA;QAEnB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;QAExB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAGpB,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC3C,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAEhC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAA;IACvD,CAAC;IAED,0EAA0E;IAC1E,qCAAqC;IACrC,MAAM,CAAC,sBAAsB,CAAC,KAAa,EAAE,MAAc,EAAE,iBAAgC;QAC5F,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAA;QAE/E,OAAO,IAAI,UAAU,CAAC;YACrB,KAAK;YACL,MAAM;YACN,QAAQ;YACR,qBAAqB,EAAE,iBAAiB,CAAC,IAAI;SAC7C,CAAC,CAAA;IACH,CAAC;IAED,+EAA+E;IAC/E,yCAAyC;IACzC,MAAM,CAAC,0BAA0B,CAAC,KAAa,EAAE,MAAc,EAAE,YAAoB;QACpF,OAAO,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;IACvD,CAAC;CACD;AAED,iGAAiG;AACjG,wBAAwB;AACxB,iGAAiG;AAEjG,0FAA0F;AAC1F,6FAA6F;AAC7F,wDAAwD;AACxD,MAAM,UAAU,oBAAoB,CAAC,aAA4B;IAChE,MAAM,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;IAEtF,MAAM,sBAAsB,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAA;IAC3E,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAEnF,kFAAkF;IAClF,gFAAgF;IAChF,iCAAiC;IACjC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA+B,CAAA;IAEnE,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAA;QAErG,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YACjC,SAAQ;QACT,CAAC;QAED,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;QAEtE,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAA;QAE5E,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAA;QAC5F,oBAAoB,CAAC,GAAG,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAA;IAChE,CAAC;IAED,+EAA+E;IAC/E,2EAA2E;IAC3E,iFAAiF;IACjF,MAAM,QAAQ,GAAuB,EAAE,CAAA;IAEvC,KAAK,MAAM,CAAC,yBAAyB,EAAE,UAAU,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAC5E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACpC,IAAI,oBAAoB,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;gBACjD,SAAQ;YACT,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC1B,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,KAAK,CAAC,cAAc,KAAK,yBAAyB,CAAC,EAAE,CAAC;gBAE5G,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,yBAAyB,EAAE,CAAC,CAAA;YACxG,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO;QACN,QAAQ;QACR,iBAAiB;KACjB,CAAA;AACF,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,8DAA8D;AAC9D,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,kDAAkD;AAClD,SAAS,oBAAoB,CAAC,SAA4B,EAAE,UAA+B;IAC1F,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,SAAQ;QACT,CAAC;QAED,MAAM,qBAAqB,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;QAEvF,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;QAE/E,IAAI,qBAAqB,KAAK,CAAC,CAAC,IAAI,iBAAiB,KAAK,CAAC,CAAC,IAAI,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;YAC3G,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED,+EAA+E;AAC/E,6EAA6E;AAC7E,SAAS,YAAY,CAAC,eAA8B,EAAE,UAAuB;IAC5E,MAAM,SAAS,GAAG,UAAU,CAAC,kBAAkB,IAAI,UAAU,CAAA;IAE7D,OAAO,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,kBAAkB,IAAI,WAAW,CAAC,KAAK,SAAS,CAAC,CAAA;AAC/G,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAM,EAAE,CAAM;IACxC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QACzB,OAAO,KAAK,CAAA;IACb,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAA;IAC/B,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;IAChF,CAAC;IAED,OAAO,KAAK,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAwB;IACxD,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,WAAW,CAAA;IAEjD,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,CAAA;IACrB,CAAC;IAED,iEAAiE;IACjE,+DAA+D;IAC/D,2DAA2D;IAC3D,EAAE;IACF,iEAAiE;IACjE,oCAAoC;IACpC,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;QAErC,IAAI,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACrD,OAAO,UAAU,CAAC,IAAI,CAAA;QACvB,CAAC;IACF,CAAC;IAED,MAAM,sBAAsB,GAAG,GAAG,CAAA;IAClC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,sBAAsB,CAAC,CAAA;IAEjE,OAAO,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;AAClD,CAAC;AAED,iGAAiG;AACjG,sBAAsB;AACtB,iGAAiG;AAEjG,yFAAyF;AACzF,uFAAuF;AACvF,oFAAoF;AACpF,yFAAyF;AACzF,6DAA6D;AAC7D,SAAS,0BAA0B,CAAC,gBAAiC;IACpE,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,CAAA;IACV,CAAC;IAED,IAAI,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,YAAY,GAAG,CAAC,CAAA;QAEpB,OAAO,YAAY,GAAG,YAAY,CAAC,MAAM;YACxC,YAAY,GAAG,KAAK,CAAC,MAAM;YAC3B,kBAAkB,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAEtE,YAAY,IAAI,CAAC,CAAA;QAClB,CAAC;QAED,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;QAElD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAK;QACN,CAAC;IACF,CAAC;IAED,OAAO,YAAY,CAAA;AACpB,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAc,EAAE,CAAc;IACzD,OAAO,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,iGAAiG;AACjG,sBAAsB;AACtB,iGAAiG;AACjG,SAAS,iBAAiB,CAAC,OAA0B,EAAE,IAAY,EAAE,MAAc,EAAE,sBAA8B;IAClH,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IAEzF,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,iCAAiC,OAAO,MAAM;YACpD,2BAA2B,IAAI,YAAY,MAAM,KAAK,OAAO,CAAC,YAAY,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,wBAAwB,CAAA;IAC/H,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;IACvC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC1C,CAAC,CAAC,0BAA0B,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,EAAE,CAAA;IAEL,MAAM,cAAc,GAAG,OAAO,CAAC,qBAAqB,KAAK,SAAS;QACjE,CAAC,CAAC,kBAAkB,OAAO,CAAC,qBAAqB,wCAAwC,eAAe,EAAE;QAC1G,CAAC,CAAC,qCAAqC,eAAe,EAAE,CAAA;IAEzD,OAAO,iCAAiC,OAAO,OAAO,cAAc,EAAE,CAAA;AACvE,CAAC;AAED,kFAAkF;AAClF,4CAA4C;AAC5C,SAAS,0BAA0B,CAAC,QAAqC;IACxE,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAoB,CAAA;IAExD,KAAK,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3D,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QAE3E,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpD,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1C,CAAC;QAED,oBAAoB,CAAC,GAAG,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO,CAAC,GAAG,oBAAoB,CAAC,OAAO,EAAE,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAC,OAAO,cAAc,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7G,IAAI,CAAC,MAAM,CAAC,CAAA;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,MAAc,EAAE,sBAA8B;IACxF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAExD,IAAI,eAAe,GAAG,MAAM,CAAA;IAC5B,OAAO,eAAe,GAAG,CAAC,IAAI,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACnE,eAAe,IAAI,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,aAAa,GAAG,MAAM,CAAA;IAC1B,OAAO,aAAa,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC;QACtE,aAAa,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAEnF,IAAI,aAAa,GAAG,QAAQ,CAAA;IAC5B,IAAI,oBAAoB,GAAG,MAAM,CAAA;IAEjC,mFAAmF;IACnF,6CAA6C;IAC7C,IAAI,QAAQ,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAA;QAErD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC,CAAA;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,CAAA;QAErE,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC,CAAA;QAC1C,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAA;QAEpD,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;QAElE,aAAa,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAC9F,oBAAoB,GAAG,CAAC,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACzF,CAAC;IAED,IAAI,oBAA4B,CAAA;IAEhC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,iBAAiB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;QAEhD,oBAAoB,GAAG,2BAA2B,iBAAiB,IAAI,CAAA;IACxE,CAAC;SAAM,CAAC;QACP,oBAAoB,GAAG,4BAA4B,CAAA;IACpD,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,IAAI,YAAY,MAAM,GAAG,oBAAoB,UAAU,UAAU,CAAC,aAAa,CAAC,OAAO,iBAAiB,CAAC,aAAa,EAAE,oBAAoB,CAAC,GAAG,CAAA;IAExK,OAAO,IAAI,CAAA;AACZ,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { Grammar } from './Grammar.js';
2
- export declare function parse(inputString: string, grammar: Grammar<any>, options?: TopDownParserOptions): ParseTreeNode[];
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 TopDownParserOptions {
15
+ export interface ParserOptions {
15
16
  }
16
- //# sourceMappingURL=TopDownParser.d.ts.map
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
- let namedGroupIndicesIdentifiers = undefined;
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
- namedGroupIndicesIdentifiers = Object.keys(groupsIndices.groups);
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: namedGroupIndicesIdentifiers ? namedGroupIndicesIdentifiers[i - 1] : i.toString(),
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=TopDownParser.js.map
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"}