grammar-composer 0.3.1 → 0.4.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.
@@ -4,56 +4,74 @@ export class RegExpGrammar {
4
4
  //////////////////////////////////////////////////////////////////////////////////////////////
5
5
  // High-level productions
6
6
  //////////////////////////////////////////////////////////////////////////////////////////////
7
+ root = () => this.sequenceOrDisjunction;
7
8
  disjunction = () => [
8
9
  this.sequence,
9
- G.possibly([
10
- this.disjunctionSeparator,
11
- this.disjunction,
10
+ G.oneOrMore([
11
+ '|',
12
+ this.sequence,
12
13
  ])
13
14
  ];
14
- sequence = () => G.zeroOrMore(this.element);
15
- element = () => G.anyOf(this.anchor, this.lookaround, this.possiblyQuantifiedExpression);
15
+ sequence = () => G.cached(G.zeroOrMore(this.sequenceElement));
16
+ sequenceOrDisjunction = [
17
+ G.anyOf(this.disjunction, this.sequence)
18
+ ];
16
19
  //////////////////////////////////////////////////////////////////////////////////////////////
17
- // Quantifed expressions
20
+ // Quantifier expressions
18
21
  //////////////////////////////////////////////////////////////////////////////////////////////
19
- possiblyQuantifiedExpression = () => [
20
- G.anyOf(this.group, this.backReference, this.singleCharExpression),
21
- G.possibly(G.anyOf(this.starQuantifier, this.plusQuantifier, this.exactCountQuantifier, this.countRangeQuantifier)),
22
- G.possibly(this.nongreedyQuantifier), // Nongreedy quantifier
22
+ starQuantifier = () => [
23
+ '*',
24
+ G.possibly(this.nongreedyQuantifier)
23
25
  ];
24
- exactCountQuantifier = () => G.pattern([
25
- '{',
26
- R.captureAs('count', R.oneOrMore(digit)),
27
- '}',
28
- ]);
29
- countRangeQuantifier = () => G.pattern([
30
- '{',
31
- R.captureAs('start', R.oneOrMore(digit)),
32
- ',',
33
- R.possibly(R.captureAs('end', R.oneOrMore(digit))),
34
- '}',
35
- ]);
26
+ plusQuantifier = () => [
27
+ '+',
28
+ G.possibly(this.nongreedyQuantifier)
29
+ ];
30
+ optionalQuantifier = () => [
31
+ '?',
32
+ G.possibly(this.nongreedyQuantifier)
33
+ ];
34
+ exactCountQuantifier = () => [
35
+ G.pattern([
36
+ '{',
37
+ R.captureAs('count', R.oneOrMore(digit)),
38
+ '}',
39
+ ]),
40
+ G.possibly(this.nongreedyQuantifier)
41
+ ];
42
+ countRangeQuantifier = () => [
43
+ G.pattern([
44
+ '{',
45
+ R.captureAs('start', R.oneOrMore(digit)),
46
+ ',',
47
+ R.possibly(R.captureAs('end', R.oneOrMore(digit))),
48
+ '}',
49
+ ]),
50
+ G.possibly(this.nongreedyQuantifier)
51
+ ];
52
+ nongreedyQuantifier = () => '?';
53
+ quantifier = () => G.anyOf(this.starQuantifier, this.plusQuantifier, this.optionalQuantifier, this.exactCountQuantifier, this.countRangeQuantifier);
36
54
  //////////////////////////////////////////////////////////////////////////////////////////////
37
55
  // Group expressions
38
56
  //////////////////////////////////////////////////////////////////////////////////////////////
39
- group = () => G.anyOf(this.uncapturedGroup, this.namedCaptureGroup, this.unnamedCaptureGroup);
40
57
  uncapturedGroup = () => [
41
58
  '(?:',
42
- this.disjunction,
59
+ this.sequenceOrDisjunction,
43
60
  ')',
44
61
  ];
45
62
  namedCaptureGroup = () => [
46
63
  '(?<',
47
64
  G.pattern(R.captureAs('name', R.oneOrMore(identifierChar))),
48
65
  '>',
49
- this.disjunction,
66
+ this.sequenceOrDisjunction,
50
67
  ')',
51
68
  ];
52
69
  unnamedCaptureGroup = () => [
53
70
  '(',
54
- this.disjunction,
71
+ this.sequenceOrDisjunction,
55
72
  ')',
56
73
  ];
74
+ group = G.anyOf(this.uncapturedGroup, this.namedCaptureGroup, this.unnamedCaptureGroup);
57
75
  //////////////////////////////////////////////////////////////////////////////////////////////
58
76
  // Backreferences
59
77
  //////////////////////////////////////////////////////////////////////////////////////////////
@@ -72,22 +90,22 @@ export class RegExpGrammar {
72
90
  //////////////////////////////////////////////////////////////////////////////////////////////
73
91
  positiveLookahead = () => [
74
92
  '(?=',
75
- this.disjunction,
93
+ this.sequenceOrDisjunction,
76
94
  ')',
77
95
  ];
78
96
  negativeLookahead = () => [
79
97
  '(?!',
80
- this.disjunction,
98
+ this.sequenceOrDisjunction,
81
99
  ')',
82
100
  ];
83
101
  positiveLookbehind = () => [
84
102
  '(?<=',
85
- this.disjunction,
103
+ this.sequenceOrDisjunction,
86
104
  ')',
87
105
  ];
88
106
  negativeLookbehind = () => [
89
107
  '(?<!',
90
- this.disjunction,
108
+ this.sequenceOrDisjunction,
91
109
  ')',
92
110
  ];
93
111
  lookaround = G.anyOf(this.positiveLookahead, this.negativeLookahead, this.positiveLookbehind, this.negativeLookbehind);
@@ -95,19 +113,18 @@ export class RegExpGrammar {
95
113
  // Single character expressions
96
114
  //////////////////////////////////////////////////////////////////////////////////////////////
97
115
  singleCharExpression = () => G.anyOf(this.anyCharWildcard, this.charClass, this.unicodeProperty, this.notUnicodeProperty, this.escapedCharacterClass, this.charcodeOrEscapedChar, this.unreservedCharLiteral);
98
- unreservedCharLiteral = () => G.pattern(R.notAnyOfChars('[', '.', '*', '+', '?', '^', '$', '{', '}', '(', ')', '|', ']', '\\'));
116
+ unreservedCharLiteral = () => G.pattern(R.captureAs('char', R.notAnyOfChars('[', '.', '*', '+', '?', '^', '$', '{', '}', '(', ')', '|', ']', '\\')));
99
117
  escapedCharLiteral = () => G.pattern([
100
118
  '\\',
101
- R.anyChar
119
+ R.captureAs('char', R.anyChar)
102
120
  ]);
103
121
  hexCharcode = () => G.pattern([
104
122
  '\\x',
105
- hexDigit,
106
- hexDigit
123
+ R.captureAs('value', R.repeated(2, hexDigit))
107
124
  ]);
108
125
  controlCharcode = () => G.pattern([
109
126
  '\\c',
110
- R.anyOf(R.charRange('A', 'Z'), R.charRange('a', 'z')),
127
+ R.captureAs('value', R.anyOf(R.charRange('A', 'Z'), R.charRange('a', 'z')))
111
128
  ]);
112
129
  nullCharcode = () => G.pattern('\\0');
113
130
  codepoint = () => G.anyOf(G.pattern([
@@ -117,10 +134,7 @@ export class RegExpGrammar {
117
134
  '}',
118
135
  ]), G.pattern([
119
136
  '\\u',
120
- hexDigit,
121
- hexDigit,
122
- hexDigit,
123
- hexDigit
137
+ R.captureAs('value', R.repeated(4, hexDigit))
124
138
  ]));
125
139
  codepointRange = () => G.pattern([
126
140
  '\\u',
@@ -147,39 +161,52 @@ export class RegExpGrammar {
147
161
  ]),
148
162
  '}',
149
163
  ];
150
- charClassChar = () => G.pattern(R.notAnyOfChars(']'));
151
164
  charClass = () => [
152
165
  '[',
153
166
  G.possibly(this.charClassNegator),
154
- G.oneOrMore(G.anyOf(this.charRange, this.codepointRange, this.unicodeProperty, this.notUnicodeProperty, this.escapedCharacterClass, this.charcodeOrEscapedChar, this.charClassChar)),
167
+ G.oneOrMore(G.anyOf(this.charRange, this.codepointRange, this.unicodeProperty, this.notUnicodeProperty, this.escapedCharacterClass, this.charcodeOrEscapedChar, this.charClassLiteral)),
155
168
  ']',
156
169
  ];
157
- charcodeOrEscapedChar = G.anyOf(this.codepoint, this.hexCharcode, this.controlCharcode, this.escapedCharLiteral);
158
- charRangeElement = G.anyOf(this.charcodeOrEscapedChar, G.pattern(R.notAnyOfChars(']')));
170
+ charcodeOrEscapedChar = G.anyOf(this.codepoint, this.hexCharcode, this.controlCharcode, this.nullCharcode, this.escapedCharLiteral);
171
+ charClassLiteral = () => G.pattern(R.captureAs('char', R.notAnyOfChars(']')));
172
+ charRangeElement = G.anyOf(this.charcodeOrEscapedChar, this.charClassLiteral);
173
+ charRangeStart = () => this.charRangeElement;
174
+ charRangeEnd = () => this.charRangeElement;
159
175
  charRange = () => [
160
- this.charRangeElement,
176
+ this.charRangeStart,
161
177
  '-',
162
- this.charRangeElement,
178
+ this.charRangeEnd,
163
179
  ];
164
180
  //////////////////////////////////////////////////////////////////////////////////////////////
165
181
  // Special symbols
166
182
  //////////////////////////////////////////////////////////////////////////////////////////////
167
- starQuantifier = () => '*';
168
- plusQuantifier = () => '+';
169
- nongreedyQuantifier = () => '?';
170
183
  charClassNegator = () => '^';
171
184
  inputStartAnchor = () => '^';
172
185
  inputEndAnchor = () => '$';
173
186
  anyCharWildcard = () => '.';
174
- disjunctionSeparator = () => '|';
175
187
  anchor = G.anyOf(this.inputStartAnchor, this.inputEndAnchor);
176
- escapedCharacterClass = () => G.pattern(R.anyOf(R.captureAs('whitespace', escapedCharString.whitespace), R.captureAs('nonWhitespace', escapedCharString.nonWhitespace), R.captureAs('digit', escapedCharString.digit), R.captureAs('nonDigit', escapedCharString.nonDigit), R.captureAs('word', escapedCharString.word), R.captureAs('nonWord', escapedCharString.nonWord), R.captureAs('wordBoundary', escapedCharString.wordBoundary), R.captureAs('nonWordBoundary', escapedCharString.nonWordBoundary), R.captureAs('formFeed', escapedCharString.formFeed), R.captureAs('carriageReturn', escapedCharString.carriageReturn), R.captureAs('lineFeed', escapedCharString.lineFeed), R.captureAs('tab', escapedCharString.tab), R.captureAs('verticalTab', escapedCharString.verticalTab), R.captureAs('backwardSlash', escapedCharString.backwardSlash)));
188
+ escapedCharacterClass = () => G.pattern(R.anyOf(R.captureAs('whitespace', escapedChars.whitespace), R.captureAs('nonWhitespace', escapedChars.nonWhitespace), R.captureAs('digit', escapedChars.digit), R.captureAs('nonDigit', escapedChars.nonDigit), R.captureAs('word', escapedChars.word), R.captureAs('nonWord', escapedChars.nonWord), R.captureAs('wordBoundary', escapedChars.wordBoundary), R.captureAs('nonWordBoundary', escapedChars.nonWordBoundary), R.captureAs('formFeed', escapedChars.formFeed), R.captureAs('carriageReturn', escapedChars.carriageReturn), R.captureAs('lineFeed', escapedChars.lineFeed), R.captureAs('tab', escapedChars.tab), R.captureAs('verticalTab', escapedChars.verticalTab), R.captureAs('backwardSlash', escapedChars.backwardSlash)));
189
+ //////////////////////////////////////////////////////////////////////////////////////////////
190
+ // Sequence elements (positioned here due to TypeScript class member ordering requirements)
191
+ //////////////////////////////////////////////////////////////////////////////////////////////
192
+ quantifiableExpression = G.cached(G.anyOf(this.group, this.backReference, this.singleCharExpression));
193
+ quantifiedExpression = () => [
194
+ this.quantifiableExpression,
195
+ this.quantifier,
196
+ ];
197
+ sequenceElement = G.anyOf(this.anchor, this.lookaround, this.quantifiedExpression, this.quantifiableExpression);
177
198
  }
199
+ //////////////////////////////////////////////////////////////////////////////////////////////
200
+ // Shared regular expressions
201
+ //////////////////////////////////////////////////////////////////////////////////////////////
178
202
  const digit = R.charRange('0', '9');
179
203
  const letter = R.anyOf(R.charRange('a', 'z'), R.charRange('A', 'Z'));
180
204
  const hexDigit = R.anyOf(digit, R.charRange('a', 'f'), R.charRange('A', 'F'));
181
205
  const identifierChar = R.anyOf(letter, digit, '_', '$');
182
- const escapedCharString = {
206
+ //////////////////////////////////////////////////////////////////////////////////////////////
207
+ // Escaped characters lookup
208
+ //////////////////////////////////////////////////////////////////////////////////////////////
209
+ const escapedChars = {
183
210
  whitespace: '\\s',
184
211
  nonWhitespace: '\\S',
185
212
  digit: '\\d',
@@ -1 +1 @@
1
- {"version":3,"file":"RegExpGrammar.js","sourceRoot":"","sources":["../../../src/tests/test-grammars/RegExpGrammar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RegExpGrammar.js","sourceRoot":"","sources":["../../../src/tests/test-grammars/RegExpGrammar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import * as G from '../../exports/Exports.js';
2
+ export declare class SimpleTestGrammar1 {
3
+ root: () => G.Choice[];
4
+ }
5
+ //# sourceMappingURL=SimpleTestGrammar1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleTestGrammar1.d.ts","sourceRoot":"","sources":["../../../src/tests/test-grammars/SimpleTestGrammar1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,0BAA0B,CAAA;AAE7C,qBAAa,kBAAkB;IAC9B,IAAI,mBAKH;CACD"}
@@ -0,0 +1,7 @@
1
+ import * as G from '../../exports/Exports.js';
2
+ export class SimpleTestGrammar1 {
3
+ root = () => [
4
+ G.anyOf('abc', 'abcdefg')
5
+ ];
6
+ }
7
+ //# sourceMappingURL=SimpleTestGrammar1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimpleTestGrammar1.js","sourceRoot":"","sources":["../../../src/tests/test-grammars/SimpleTestGrammar1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,0BAA0B,CAAA;AAE7C,MAAM,OAAO,kBAAkB;IAC9B,IAAI,GAAG,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC,KAAK,CACN,KAAK,EACL,SAAS,CACT;KACD,CAAA;CACD"}
@@ -1,9 +1,9 @@
1
1
  export declare function roundToDigits(val: number, digits?: number): number;
2
- export declare function isNumber(value: any): value is number;
3
- export declare function isString(value: any): value is string;
4
- export declare function isBigInt(value: any): value is bigint;
5
- export declare function isObject(value: any): value is object;
6
- export declare function isArray(value: any): value is any[];
7
- export declare function isBoolean(value: any): value is boolean;
8
- export declare function isFunction(value: any): value is Function;
2
+ export declare function isNumber(value: unknown): value is number;
3
+ export declare function isString(value: unknown): value is string;
4
+ export declare function isBigInt(value: unknown): value is bigint;
5
+ export declare function isObject(value: unknown): value is object;
6
+ export declare function isArray(value: unknown): value is unknown[];
7
+ export declare function isBoolean(value: unknown): value is boolean;
8
+ export declare function isFunction(value: unknown): value is Function;
9
9
  //# sourceMappingURL=Utilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAIpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE,CAElD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAEtD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,QAAQ,CAExD"}
1
+ {"version":3,"file":"Utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAIpD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,EAAE,CAE1D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE1D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC;IACpD,MAAM,UAAU,GAAG,EAAE,IAAI,MAAM,CAAA;IAE/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAU;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAU;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAU;IACnC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAU;IACpC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"Utilities.js","sourceRoot":"","sources":["../../src/utilities/Utilities.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,MAAM,GAAG,CAAC;IACpD,MAAM,UAAU,GAAG,EAAE,IAAI,MAAM,CAAA;IAE/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAc;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAA;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "grammar-composer",
3
- "version": "0.3.1",
4
- "description": "Defines and generates parsers from composable grammar definitions. Includes advanced features like lexer-free parsing, selective packrat memoization and static analysis.",
3
+ "version": "0.4.0",
4
+ "description": "Creates and generates parsers from composable grammar definitions. Includes advanced features like lexer-free parsing, selective packrat memoization and static analysis.",
5
5
  "author": "Rotem Dan",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -34,15 +34,20 @@ export function buildGrammar<T extends { [key: string]: any }>(obj: T | (new ()
34
34
  optionalNonterminalLookup.set(objectProperty, newOptionalNonterminal)
35
35
  }
36
36
 
37
- let uniqueIdCounter = 0
38
- const uniqueIdSource = () => uniqueIdCounter++
37
+ let cacheIdCounter = 0
38
+ const getNewCacheId = () => {
39
+ const newCacheId = cacheIdCounter
40
+ cacheIdCounter += 1
41
+
42
+ return newCacheId
43
+ }
39
44
 
40
45
  for (const [func, nonterminal] of nonterminalLookup) {
41
46
  const preparedContent = prepareGrammarElement(
42
47
  nonterminal.content,
43
48
  nonterminalLookup,
44
49
  optionalNonterminalLookup,
45
- uniqueIdSource)
50
+ getNewCacheId)
46
51
 
47
52
  nonterminal.content = preparedContent
48
53
 
@@ -68,7 +73,7 @@ export function buildGrammar<T extends { [key: string]: any }>(obj: T | (new ()
68
73
  return new Grammar<T>(
69
74
  nonterminals,
70
75
  startProductionName,
71
- uniqueIdCounter
76
+ cacheIdCounter
72
77
  )
73
78
  }
74
79
 
@@ -76,41 +81,44 @@ function prepareGrammarElement(
76
81
  rootElement: GrammarElement,
77
82
  nonterminalLookup: Map<Function, Nonterminal>,
78
83
  optionalNonterminalLookup: Map<Function, Nonterminal>,
79
- getUniqueId: () => number
84
+ getNewCacheId: () => number
80
85
  ): GrammarElement {
81
86
  function prepare(element: GrammarElement): GrammarElement {
87
+ const setCacheIdIfNeeded = (element: GrammarElement) => {
88
+ if (element.cached === true) {
89
+ element.cacheId = getNewCacheId()
90
+ }
91
+
92
+ return element
93
+ }
94
+
82
95
  switch (element.type) {
83
96
  case 'StringTerminal':
84
97
  case 'Nonterminal': {
85
- if (element.uniqueId === undefined) {
86
- element.uniqueId = getUniqueId()
87
- }
88
-
89
- return element
98
+ return setCacheIdIfNeeded({
99
+ ...element
100
+ })
90
101
  }
91
102
 
92
103
  case 'PatternTerminal': {
93
- return {
104
+ return setCacheIdIfNeeded({
94
105
  ...element,
95
- uniqueId: getUniqueId()
96
- }
106
+ })
97
107
  }
98
108
 
99
109
  case 'Repetition': {
100
- return {
110
+ return setCacheIdIfNeeded({
101
111
  ...element,
102
112
  content: prepare(element.content),
103
- uniqueId: getUniqueId()
104
- }
113
+ })
105
114
  }
106
115
 
107
116
  case 'Sequence':
108
117
  case 'Choice': {
109
- return {
118
+ return setCacheIdIfNeeded({
110
119
  ...element,
111
120
  members: element.members.map(element => prepare(element)),
112
- uniqueId: getUniqueId()
113
- }
121
+ })
114
122
  }
115
123
 
116
124
  case 'NonterminalReference': {
@@ -128,23 +136,16 @@ function prepareGrammarElement(
128
136
  throw new Error(`Couldn't resolve function reference in grammar element: ${JSON.stringify(element)}`)
129
137
  }
130
138
 
131
- if (element.cached !== undefined || element.uniqueId !== undefined) {
132
- const clonedNonterminal = { ...nonterminal }
139
+ if (element.cached === true) {
140
+ return {
141
+ ...nonterminal,
133
142
 
134
- if (element.cached !== undefined) {
135
- clonedNonterminal.cached = element.cached
143
+ cached: true,
144
+ cacheId: getNewCacheId(),
136
145
  }
137
-
138
- clonedNonterminal.uniqueId = getUniqueId()
139
-
140
- return clonedNonterminal
141
- }
142
-
143
- if (nonterminal.uniqueId === undefined) {
144
- nonterminal.uniqueId = getUniqueId()
146
+ } else {
147
+ return nonterminal
145
148
  }
146
-
147
- return nonterminal
148
149
  }
149
150
  }
150
151
  }
@@ -407,7 +408,8 @@ export function zeroOrMore(content: Production): Repetition {
407
408
  return {
408
409
  type: 'Repetition',
409
410
  content: productionToGrammarElement(content),
410
- optional: true
411
+ optional: true,
412
+ cached: false,
411
413
  }
412
414
  }
413
415
 
@@ -415,7 +417,8 @@ export function oneOrMore(content: Production): Repetition {
415
417
  return {
416
418
  type: 'Repetition',
417
419
  content: productionToGrammarElement(content),
418
- optional: false
420
+ optional: false,
421
+ cached: false,
419
422
  }
420
423
  }
421
424
 
@@ -430,7 +433,8 @@ export function anyOf(...members: Production[]): Choice {
430
433
  type: 'Choice',
431
434
  members: normalizedMembers,
432
435
  optional: false,
433
- exhaustive: false
436
+ exhaustive: false,
437
+ cached: false,
434
438
  }
435
439
  }
436
440
 
@@ -445,7 +449,9 @@ export function bestOf(...members: Production[]): Choice {
445
449
  type: 'Choice',
446
450
  members: normalizedMembers,
447
451
  optional: false,
448
- exhaustive: true
452
+ exhaustive: true,
453
+
454
+ cached: false,
449
455
  }
450
456
  }
451
457
 
@@ -468,6 +474,8 @@ export function pattern(pattern: Pattern): PatternTerminal {
468
474
  pattern,
469
475
  regExp,
470
476
  optional,
477
+
478
+ cached: false,
471
479
  }
472
480
  }
473
481
 
@@ -490,7 +498,9 @@ function stringTerminal(content: string): StringTerminal {
490
498
  return {
491
499
  type: 'StringTerminal',
492
500
  content,
493
- optional: false
501
+ optional: false,
502
+
503
+ cached: false,
494
504
  }
495
505
  }
496
506
 
@@ -504,6 +514,8 @@ function nonterminal(name: string, content: GrammarElement): Nonterminal {
504
514
  name,
505
515
  content,
506
516
  optional: false,
517
+
518
+ cached: false,
507
519
  }
508
520
  }
509
521
 
@@ -511,7 +523,9 @@ function sequence(members: GrammarElement[]): Sequence {
511
523
  return {
512
524
  type: 'Sequence',
513
525
  members,
514
- optional: false
526
+ optional: false,
527
+
528
+ cached: false,
515
529
  }
516
530
  }
517
531
 
@@ -519,7 +533,9 @@ function unresolvedReference(reference: Function): NonterminalReference {
519
533
  return {
520
534
  type: 'NonterminalReference',
521
535
  reference,
522
- optional: false
536
+ optional: false,
537
+
538
+ cached: false,
523
539
  }
524
540
  }
525
541
 
@@ -543,12 +559,13 @@ function productionToGrammarElement(production: Production): GrammarElement {
543
559
  export class Grammar<T> {
544
560
  readonly productions: Record<keyof T, any>
545
561
  readonly startProductionName: keyof T
546
- readonly maxElementId: number
547
562
 
548
- constructor(productions: Record<keyof T, any>, startProductionName: keyof T, maxElementId: number) {
563
+ readonly maxCacheId: number
564
+
565
+ constructor(productions: Record<keyof T, any>, startProductionName: keyof T, maxCacheId: number) {
549
566
  this.startProductionName = startProductionName
550
567
  this.productions = productions
551
- this.maxElementId = maxElementId
568
+ this.maxCacheId = maxCacheId
552
569
  }
553
570
 
554
571
  parse(text: string) {
@@ -574,8 +591,9 @@ export type GrammarElement =
574
591
  interface GrammarElementBase {
575
592
  type: string
576
593
  optional: boolean
577
- uniqueId?: number
578
- cached?: boolean
594
+
595
+ cached: boolean
596
+ cacheId?: number
579
597
  }
580
598
 
581
599
  export type Terminal = StringTerminal | PatternTerminal