grammar-composer 0.3.0 → 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.
@@ -2,58 +2,76 @@ import * as G from '../../exports/Exports.js';
2
2
  import * as R from 'regexp-composer';
3
3
  export class RegExpGrammar {
4
4
  //////////////////////////////////////////////////////////////////////////////////////////////
5
- // High level productions
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.oneOrMore(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
- '(:',
42
- this.disjunction,
58
+ '(?:',
59
+ this.sequenceOrDisjunction,
43
60
  ')',
44
61
  ];
45
62
  namedCaptureGroup = () => [
46
63
  '(?<',
47
- G.pattern(R.captureAs('name', R.oneOrMore(letter))),
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
  //////////////////////////////////////////////////////////////////////////////////////////////
@@ -63,7 +81,7 @@ export class RegExpGrammar {
63
81
  ]);
64
82
  namedBackreference = () => G.pattern([
65
83
  '\\k<',
66
- R.captureAs('name', digit),
84
+ R.captureAs('name', R.oneOrMore(identifierChar)),
67
85
  '>',
68
86
  ]);
69
87
  backReference = G.anyOf(this.unnamedBackreference, this.namedBackreference);
@@ -72,49 +90,52 @@ 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);
94
112
  //////////////////////////////////////////////////////////////////////////////////////////////
95
113
  // Single character expressions
96
114
  //////////////////////////////////////////////////////////////////////////////////////////////
97
- singleCharExpression = () => G.anyOf(this.anyCharWildcard, this.charClass, this.unicodeProperty, this.notUnicodeProperty, this.charcodeOrEscapedChar, this.unreservedCharLiteral);
98
- unreservedCharLiteral = () => G.pattern(R.notAnyOfChars('[', '.', '*', '+', '?', '^', '$', '{', '}', '(', ')', '|', ']', '\\'));
115
+ singleCharExpression = () => G.anyOf(this.anyCharWildcard, this.charClass, this.unicodeProperty, this.notUnicodeProperty, this.escapedCharacterClass, this.charcodeOrEscapedChar, this.unreservedCharLiteral);
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.charRange('A', 'Z'),
127
+ R.captureAs('value', R.anyOf(R.charRange('A', 'Z'), R.charRange('a', 'z')))
111
128
  ]);
112
- codepoint = () => G.pattern([
129
+ nullCharcode = () => G.pattern('\\0');
130
+ codepoint = () => G.anyOf(G.pattern([
113
131
  '\\u',
114
132
  '{',
115
- R.captureAs('value', R.oneOrMore(hexDigit)),
133
+ R.captureAs('value', R.repeated([1, 6], hexDigit)),
116
134
  '}',
117
- ]);
135
+ ]), G.pattern([
136
+ '\\u',
137
+ R.captureAs('value', R.repeated(4, hexDigit))
138
+ ]));
118
139
  codepointRange = () => G.pattern([
119
140
  '\\u',
120
141
  '{',
@@ -133,52 +154,65 @@ export class RegExpGrammar {
133
154
  ]);
134
155
  unicodePropertyBodyPattern = [
135
156
  '{',
136
- R.captureAs('property', R.oneOrMore(letterOrDigit)),
157
+ R.captureAs('property', R.oneOrMore(R.anyOf(letter, digit, '_', '-'))),
137
158
  R.possibly([
138
159
  '=',
139
- R.captureAs('value', R.oneOrMore(letterOrDigit)),
160
+ R.captureAs('value', R.oneOrMore(R.anyOf(letter, digit, '_', '-'))),
140
161
  ]),
141
162
  '}',
142
163
  ];
143
- charClassChar = () => G.pattern(R.notAnyOfChars(']'));
144
164
  charClass = () => [
145
165
  '[',
146
166
  G.possibly(this.charClassNegator),
147
- G.oneOrMore(G.anyOf(this.charRange, this.codepointRange, this.charClass, this.unicodeProperty, this.notUnicodeProperty, this.charcodeOrEscapedChar, this.charClassChar)),
167
+ G.oneOrMore(G.anyOf(this.charRange, this.codepointRange, this.unicodeProperty, this.notUnicodeProperty, this.escapedCharacterClass, this.charcodeOrEscapedChar, this.charClassLiteral)),
148
168
  ']',
149
169
  ];
150
- charcodeOrEscapedChar = G.anyOf(this.codepoint, this.hexCharcode, this.controlCharcode, this.escapedCharLiteral);
151
- charRangeElement = G.anyOf(this.charcodeOrEscapedChar, G.pattern(R.anyChar));
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;
152
175
  charRange = () => [
153
- this.charRangeElement,
176
+ this.charRangeStart,
154
177
  '-',
155
- this.charRangeElement,
178
+ this.charRangeEnd,
156
179
  ];
157
180
  //////////////////////////////////////////////////////////////////////////////////////////////
158
181
  // Special symbols
159
182
  //////////////////////////////////////////////////////////////////////////////////////////////
160
- starQuantifier = () => '*';
161
- plusQuantifier = () => '+';
162
- nongreedyQuantifier = () => '?';
163
183
  charClassNegator = () => '^';
164
184
  inputStartAnchor = () => '^';
165
185
  inputEndAnchor = () => '$';
166
186
  anyCharWildcard = () => '.';
167
- disjunctionSeparator = () => '|';
168
187
  anchor = G.anyOf(this.inputStartAnchor, this.inputEndAnchor);
169
- 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('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);
170
198
  }
199
+ //////////////////////////////////////////////////////////////////////////////////////////////
200
+ // Shared regular expressions
201
+ //////////////////////////////////////////////////////////////////////////////////////////////
171
202
  const digit = R.charRange('0', '9');
172
203
  const letter = R.anyOf(R.charRange('a', 'z'), R.charRange('A', 'Z'));
173
- const letterOrDigit = R.anyOf(letter, digit);
174
204
  const hexDigit = R.anyOf(digit, R.charRange('a', 'f'), R.charRange('A', 'F'));
175
- const escapedCharString = {
205
+ const identifierChar = R.anyOf(letter, digit, '_', '$');
206
+ //////////////////////////////////////////////////////////////////////////////////////////////
207
+ // Escaped characters lookup
208
+ //////////////////////////////////////////////////////////////////////////////////////////////
209
+ const escapedChars = {
176
210
  whitespace: '\\s',
177
211
  nonWhitespace: '\\S',
178
212
  digit: '\\d',
179
213
  nonDigit: '\\D',
180
- word: '\\d',
181
- nonWord: '\\D',
214
+ word: '\\w',
215
+ nonWord: '\\W',
182
216
  wordBoundary: '\\b',
183
217
  nonWordBoundary: '\\B',
184
218
  formFeed: '\\f',
@@ -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.0",
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