grammar-composer 0.4.0 → 0.6.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 +8 -1
- package/dist/parser-generator/Grammar.d.ts.map +1 -1
- package/dist/parser-generator/Grammar.js +30 -225
- 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 +44 -42
- package/dist/parser-generator/TopDownParser.js.map +1 -1
- package/dist/tests/Test.js +23 -23
- 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 +25 -25
- package/dist/tests/test-grammars/RegExpGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/RegExpGrammar.js +48 -31
- package/dist/tests/test-grammars/RegExpGrammar.js.map +1 -1
- 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/Timer.d.ts +7 -3
- package/dist/utilities/Timer.d.ts.map +1 -1
- package/dist/utilities/Timer.js +41 -39
- package/dist/utilities/Timer.js.map +1 -1
- package/package.json +3 -3
- package/src/exports/Exports.ts +2 -0
- package/src/parser-generator/Grammar.ts +59 -265
- 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 +67 -49
- package/src/tests/Test.ts +26 -24
- package/src/tests/test-grammars/JsonGrammar.ts +28 -10
- package/src/tests/test-grammars/RegExpGrammar.ts +65 -46
- package/src/tests/test-grammars/XmlGrammar.ts +20 -8
- package/src/utilities/LineAndColumn.ts +61 -0
- package/src/utilities/Timer.ts +50 -48
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
// Terminal to text conversion
|
|
3
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
export class TerminalToText {
|
|
5
|
+
stringifiedLengthLimit;
|
|
6
|
+
constructor(stringifiedLengthLimit) {
|
|
7
|
+
this.stringifiedLengthLimit = stringifiedLengthLimit;
|
|
8
|
+
}
|
|
9
|
+
stringifyTerminal(terminal) {
|
|
10
|
+
if (terminal.type === 'StringTerminal') {
|
|
11
|
+
return this.stringifyStringTerminal(terminal);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return this.stringifyPatternTerminal(terminal);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
stringifyStringTerminal(terminal) {
|
|
18
|
+
return this.stringifyPatternStringLiteral(terminal.content);
|
|
19
|
+
}
|
|
20
|
+
stringifyPatternTerminal(terminal) {
|
|
21
|
+
let pattern = terminal.pattern;
|
|
22
|
+
// Pattern terminals are automatically anchored at the start of the current parse
|
|
23
|
+
// position. This anchor is an implementation detail, so remove it.
|
|
24
|
+
if (Array.isArray(pattern) && pattern.length > 1) {
|
|
25
|
+
const firstElement = pattern[0];
|
|
26
|
+
if (!Array.isArray(firstElement) && typeof firstElement !== 'string' &&
|
|
27
|
+
firstElement.type === 'specialToken' && firstElement.name === 'inputStart') {
|
|
28
|
+
pattern = pattern.slice(1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const stringifiedPattern = this.stringifyPattern(pattern);
|
|
32
|
+
const truncatedStringifiedPattern = this.truncateString(stringifiedPattern, this.stringifiedLengthLimit);
|
|
33
|
+
return truncatedStringifiedPattern;
|
|
34
|
+
}
|
|
35
|
+
stringifyPattern(pattern) {
|
|
36
|
+
if (typeof pattern === 'string') {
|
|
37
|
+
return this.stringifyPatternStringLiteral(pattern);
|
|
38
|
+
}
|
|
39
|
+
if (Array.isArray(pattern)) {
|
|
40
|
+
return `[${pattern.map((pattern) => this.stringifyPattern(pattern)).join(', ')}]`;
|
|
41
|
+
}
|
|
42
|
+
switch (pattern.type) {
|
|
43
|
+
case 'specialToken': {
|
|
44
|
+
return this.stringifySpecialToken(pattern);
|
|
45
|
+
}
|
|
46
|
+
case 'possibly': {
|
|
47
|
+
return `possibly(${this.stringifyPattern(pattern.content)})`;
|
|
48
|
+
}
|
|
49
|
+
case 'zeroOrMore': {
|
|
50
|
+
return `zeroOrMore(${this.stringifyPattern(pattern.content)})`;
|
|
51
|
+
}
|
|
52
|
+
case 'oneOrMore': {
|
|
53
|
+
return `oneOrMore(${this.stringifyPattern(pattern.content)})`;
|
|
54
|
+
}
|
|
55
|
+
case 'repeated': {
|
|
56
|
+
const { minCount, maxCount } = pattern;
|
|
57
|
+
const stringifiedContent = this.stringifyPattern(pattern.content);
|
|
58
|
+
if (minCount === maxCount) {
|
|
59
|
+
return `repeated(${minCount}, ${stringifiedContent})`;
|
|
60
|
+
}
|
|
61
|
+
else if (maxCount === Number.POSITIVE_INFINITY) {
|
|
62
|
+
return `repeated([${minCount}, ...], ${stringifiedContent})`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return `repeated([${minCount}, ${maxCount}], ${stringifiedContent})`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
case 'capture': {
|
|
69
|
+
if (pattern.name !== undefined) {
|
|
70
|
+
return pattern.name;
|
|
71
|
+
}
|
|
72
|
+
return `(${this.stringifyPattern(pattern.content)})`;
|
|
73
|
+
}
|
|
74
|
+
case 'anyOf': {
|
|
75
|
+
const stringifiedMembers = pattern.members.map((pattern) => this.stringifyPattern(pattern));
|
|
76
|
+
let stringified = `anyOf(${stringifiedMembers.join(', ')})`;
|
|
77
|
+
if (stringified.length > this.stringifiedLengthLimit && stringifiedMembers.length > 2) {
|
|
78
|
+
stringified = `anyOf(${stringifiedMembers[0]}, ${stringifiedMembers[1]}, …, ${stringifiedMembers[stringifiedMembers.length - 1]})`;
|
|
79
|
+
}
|
|
80
|
+
return stringified;
|
|
81
|
+
}
|
|
82
|
+
case 'notAnyOfChars': {
|
|
83
|
+
const stringifiedMembers = pattern.members.map((pattern) => this.stringifyPattern(pattern));
|
|
84
|
+
return `notAnyOfChars(${stringifiedMembers.join(', ')})`;
|
|
85
|
+
}
|
|
86
|
+
case 'followedBy': {
|
|
87
|
+
return `followedBy(${this.stringifyPattern(pattern.content)})`;
|
|
88
|
+
}
|
|
89
|
+
case 'notFollowedBy': {
|
|
90
|
+
return `notFollowedBy(${this.stringifyPattern(pattern.content)})`;
|
|
91
|
+
}
|
|
92
|
+
case 'precededBy': {
|
|
93
|
+
return `precededBy(${this.stringifyPattern(pattern.content)})`;
|
|
94
|
+
}
|
|
95
|
+
case 'notPrecededBy': {
|
|
96
|
+
return `notPrecededBy(${this.stringifyPattern(pattern.content)})`;
|
|
97
|
+
}
|
|
98
|
+
case 'sameAs': {
|
|
99
|
+
const captureGroupNameOrIndex = pattern.captureGroupNameOrIndex;
|
|
100
|
+
if (typeof captureGroupNameOrIndex === 'string') {
|
|
101
|
+
return `sameAs('${captureGroupNameOrIndex}')`;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return `sameAs(${captureGroupNameOrIndex})`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
default: {
|
|
108
|
+
throw new Error(`Unrecognized pattern type: ${pattern.type}.`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
stringifyPatternStringLiteral(text) {
|
|
113
|
+
let result = '';
|
|
114
|
+
for (const char of text) {
|
|
115
|
+
const escapedChar = escapeChar(char);
|
|
116
|
+
result += escapedChar;
|
|
117
|
+
}
|
|
118
|
+
return `'${result}'`;
|
|
119
|
+
}
|
|
120
|
+
stringifySpecialToken(token) {
|
|
121
|
+
if (token.name === 'charRange') {
|
|
122
|
+
const dashIndex = token.rawRegExp.indexOf('-');
|
|
123
|
+
if (dashIndex > 0 && dashIndex < token.rawRegExp.length - 1) {
|
|
124
|
+
const startChar = token.rawRegExp.substring(0, dashIndex).replace(/^\\/, '');
|
|
125
|
+
if (startChar.length > 0) {
|
|
126
|
+
return `charRange('${startChar}', '${token.rawRegExp.substring(dashIndex + 1)}')`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (token.name !== undefined) {
|
|
131
|
+
return token.name;
|
|
132
|
+
}
|
|
133
|
+
return token.rawRegExp;
|
|
134
|
+
}
|
|
135
|
+
truncateString(str, lengthLimit) {
|
|
136
|
+
if (str.length <= lengthLimit) {
|
|
137
|
+
return str;
|
|
138
|
+
}
|
|
139
|
+
return `${str.substring(0, lengthLimit - 1)}…`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function escapeChar(char) {
|
|
143
|
+
const charMapping = {
|
|
144
|
+
//'\\': '\\\\',
|
|
145
|
+
"'": "\\'",
|
|
146
|
+
'\n': '\\n',
|
|
147
|
+
'\r': '\\r',
|
|
148
|
+
'\t': '\\t',
|
|
149
|
+
};
|
|
150
|
+
const mappedChar = charMapping[char];
|
|
151
|
+
if (mappedChar !== undefined) {
|
|
152
|
+
return mappedChar;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return char;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=TerminalToText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalToText.js","sourceRoot":"","sources":["../../src/parser-generator/TerminalToText.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Grammar } from './Grammar.js';
|
|
2
|
-
export declare function parse(inputString: string, grammar: Grammar<any
|
|
2
|
+
export declare function parse(inputString: string, grammar: Grammar<any>, options?: TopDownParserOptions): ParseTreeNode[];
|
|
3
3
|
export interface ParseResult {
|
|
4
4
|
endOffset: number;
|
|
5
5
|
nodes: ParseTreeNode[] | undefined;
|
|
@@ -9,6 +9,8 @@ export interface ParseTreeNode {
|
|
|
9
9
|
startOffset: number;
|
|
10
10
|
endOffset: number;
|
|
11
11
|
sourceText: string;
|
|
12
|
-
children
|
|
12
|
+
children?: ParseTreeNode[];
|
|
13
|
+
}
|
|
14
|
+
export interface TopDownParserOptions {
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=TopDownParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopDownParser.d.ts","sourceRoot":"","sources":["../../src/parser-generator/TopDownParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"TopDownParser.d.ts","sourceRoot":"","sources":["../../src/parser-generator/TopDownParser.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,oBAAoB,mBA4R/F;AAKD,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,aAAa,EAAE,GAAG,SAAS,CAAA;CAClC;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,oBAAoB;CACpC"}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import { isNumber } from '../utilities/Utilities.js';
|
|
2
|
-
|
|
2
|
+
import { ParseError } from './ParseError.js';
|
|
3
|
+
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
// Main parser function
|
|
5
|
+
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
6
|
+
export function parse(inputString, grammar, options) {
|
|
7
|
+
options = { ...options };
|
|
3
8
|
const inputLength = inputString.length;
|
|
9
|
+
const nonterminalStack = [];
|
|
4
10
|
let bestFailedMatches = [];
|
|
5
11
|
let bestFailedMatchesOffset = -1;
|
|
12
|
+
const cacheKeyOffsetMultiplier = grammar.maxCacheId + 1;
|
|
13
|
+
const parseResultsCache = new Map();
|
|
6
14
|
function updateBestFailedMatchesIfNeeded(terminal, startOffset) {
|
|
7
15
|
if (startOffset >= bestFailedMatchesOffset) {
|
|
16
|
+
const failedMatch = {
|
|
17
|
+
terminal,
|
|
18
|
+
productionStack: [...nonterminalStack]
|
|
19
|
+
};
|
|
8
20
|
if (startOffset > bestFailedMatchesOffset) {
|
|
9
21
|
bestFailedMatchesOffset = startOffset;
|
|
10
|
-
bestFailedMatches = [
|
|
22
|
+
bestFailedMatches = [failedMatch];
|
|
11
23
|
}
|
|
12
24
|
else {
|
|
13
|
-
bestFailedMatches.push(
|
|
25
|
+
bestFailedMatches.push(failedMatch);
|
|
14
26
|
}
|
|
15
27
|
}
|
|
16
28
|
}
|
|
@@ -22,11 +34,9 @@ export function parse(inputString, grammar) {
|
|
|
22
34
|
return tryParseUncached(grammarElement, startOffset);
|
|
23
35
|
}
|
|
24
36
|
}
|
|
25
|
-
const offsetMultiplier = grammar.maxCacheId + 1;
|
|
26
|
-
const parseResultsCache = new Map();
|
|
27
37
|
function tryParseCached(grammarElement, startOffset) {
|
|
28
38
|
const cacheId = grammarElement.cacheId;
|
|
29
|
-
const cacheKey = (startOffset *
|
|
39
|
+
const cacheKey = (startOffset * cacheKeyOffsetMultiplier) + cacheId;
|
|
30
40
|
if (parseResultsCache.has(cacheKey)) {
|
|
31
41
|
return parseResultsCache.get(cacheKey);
|
|
32
42
|
}
|
|
@@ -72,9 +82,6 @@ export function parse(inputString, grammar) {
|
|
|
72
82
|
let namedGroupIndicesIdentifiers = undefined;
|
|
73
83
|
if (groupsIndices.groups) {
|
|
74
84
|
namedGroupIndicesIdentifiers = Object.keys(groupsIndices.groups);
|
|
75
|
-
if (namedGroupIndicesIdentifiers.length !== groupsIndices.length - 1) {
|
|
76
|
-
throw new Error(`The regular expression /${grammarElement.regExp.source}/ contains a combination of named and unnamed groups. Due to limitations of the JavaScript RegExp engine, it is impossible to reliably identify the ordering of this combination, please use either all unnamed or named groups, but not both.`);
|
|
77
|
-
}
|
|
78
85
|
}
|
|
79
86
|
const children = [];
|
|
80
87
|
for (let i = 1; i < groupsIndices.length; i++) {
|
|
@@ -101,22 +108,34 @@ export function parse(inputString, grammar) {
|
|
|
101
108
|
return parseResult;
|
|
102
109
|
}
|
|
103
110
|
case 'Nonterminal': {
|
|
111
|
+
nonterminalStack.push(grammarElement);
|
|
104
112
|
const result = tryParse(grammarElement.content, startOffset);
|
|
113
|
+
nonterminalStack.pop();
|
|
105
114
|
if (result === null) {
|
|
106
115
|
return null;
|
|
107
116
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
const grammarElementName = grammarElement.name;
|
|
118
|
+
if (grammarElement.unwrapped) {
|
|
119
|
+
const newResult = {
|
|
120
|
+
endOffset: result.endOffset,
|
|
121
|
+
nodes: result.nodes
|
|
122
|
+
};
|
|
123
|
+
return newResult;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const newNode = {
|
|
127
|
+
name: grammarElementName,
|
|
128
|
+
startOffset,
|
|
129
|
+
endOffset: result.endOffset,
|
|
130
|
+
sourceText: inputString.substring(startOffset, result.endOffset),
|
|
131
|
+
children: result.nodes,
|
|
132
|
+
};
|
|
133
|
+
const newResult = {
|
|
134
|
+
endOffset: result.endOffset,
|
|
135
|
+
nodes: [newNode]
|
|
136
|
+
};
|
|
137
|
+
return newResult;
|
|
138
|
+
}
|
|
120
139
|
}
|
|
121
140
|
case 'Sequence': {
|
|
122
141
|
let successfulResults = [];
|
|
@@ -197,31 +216,14 @@ export function parse(inputString, grammar) {
|
|
|
197
216
|
return result.nodes ?? [];
|
|
198
217
|
}
|
|
199
218
|
else {
|
|
219
|
+
const failureOffset = bestFailedMatches.length > 0 ? bestFailedMatchesOffset : (result?.endOffset ?? 0);
|
|
200
220
|
if (bestFailedMatches.length > 0) {
|
|
201
|
-
|
|
202
|
-
if (match.type === 'StringTerminal') {
|
|
203
|
-
return `'${match.content}'`;
|
|
204
|
-
}
|
|
205
|
-
else if (match.type === 'PatternTerminal') {
|
|
206
|
-
return `/${match.regExp.source}/`;
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
throw new Error(`Invalid match type: '${match.type}'`);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
const possibleMatchesWithoutDuplicates = [...(new Set(possibleMatches))];
|
|
213
|
-
let possibleMatchesString;
|
|
214
|
-
if (possibleMatchesWithoutDuplicates.length > 1) {
|
|
215
|
-
possibleMatchesString = `any of ${possibleMatchesWithoutDuplicates.join(', ')}`;
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
possibleMatchesString = possibleMatchesWithoutDuplicates[0];
|
|
219
|
-
}
|
|
220
|
-
throw new Error(`Failed parsing the input text. Expected ${possibleMatchesString} at position ${bestFailedMatchesOffset}.`);
|
|
221
|
+
throw ParseError.createFailedParseError(inputString, failureOffset, bestFailedMatches);
|
|
221
222
|
}
|
|
222
223
|
else {
|
|
223
224
|
const lastNode = result?.nodes?.[result.nodes.length - 1];
|
|
224
|
-
|
|
225
|
+
const parsedLength = lastNode?.endOffset ?? result?.endOffset ?? 0;
|
|
226
|
+
throw ParseError.createIncompleteParseError(inputString, failureOffset, parsedLength);
|
|
225
227
|
}
|
|
226
228
|
}
|
|
227
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopDownParser.js","sourceRoot":"","sources":["../../src/parser-generator/TopDownParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"TopDownParser.js","sourceRoot":"","sources":["../../src/parser-generator/TopDownParser.ts"],"names":[],"mappings":"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"}
|
package/dist/tests/Test.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Timer } from '../utilities/Timer.js';
|
|
2
2
|
import { jsonSample1 } from './test-data/TestData.js';
|
|
3
3
|
import { anyOf, buildGrammar } from '../exports/Exports.js';
|
|
4
|
-
import { JsonGrammar } from './test-grammars/JsonGrammar.js';
|
|
5
|
-
import { XmlGrammar } from './test-grammars/XmlGrammar.js';
|
|
6
|
-
import { RegExpGrammar } from './test-grammars/RegExpGrammar.js';
|
|
4
|
+
import { JsonGrammar, jsonGrammarUnwrappedNonterminalNames } from './test-grammars/JsonGrammar.js';
|
|
5
|
+
import { XmlGrammar, xmlGrammarUnwrappedNonterminalNames } from './test-grammars/XmlGrammar.js';
|
|
6
|
+
import { RegExpGrammar, regExpGrammarUnwrappedNonterminalNames } from './test-grammars/RegExpGrammar.js';
|
|
7
7
|
import { writeFile } from 'fs/promises';
|
|
8
8
|
import { SimpleTestGrammar1 } from './test-grammars/SimpleTestGrammar1.js';
|
|
9
9
|
const log = console.log;
|
|
@@ -20,7 +20,9 @@ function testBasic() {
|
|
|
20
20
|
}
|
|
21
21
|
function testJsonParser() {
|
|
22
22
|
const jsonString = jsonSample1;
|
|
23
|
-
const grammar = buildGrammar(JsonGrammar, 'expression'
|
|
23
|
+
const grammar = buildGrammar(JsonGrammar, 'expression', {
|
|
24
|
+
unwrappedNonterminalNames: jsonGrammarUnwrappedNonterminalNames
|
|
25
|
+
});
|
|
24
26
|
const iterations = 1000;
|
|
25
27
|
let result1;
|
|
26
28
|
let result2;
|
|
@@ -35,7 +37,7 @@ function testJsonParser() {
|
|
|
35
37
|
timer.logAndRestart('JSON.Parse');
|
|
36
38
|
log(JSON.stringify(result1, undefined, 4));
|
|
37
39
|
}
|
|
38
|
-
function testXmlParser() {
|
|
40
|
+
async function testXmlParser() {
|
|
39
41
|
const xmlString = `
|
|
40
42
|
<!DOCTYPE web-app>
|
|
41
43
|
|
|
@@ -43,32 +45,27 @@ function testXmlParser() {
|
|
|
43
45
|
<header>Adobe SVG Viewer</header>
|
|
44
46
|
<item action="Open" id="Open">Open</item>
|
|
45
47
|
<item action="OpenNew" id="OpenNew">Open New</item>
|
|
46
|
-
<separator/>
|
|
47
|
-
<item action="ZoomIn" id="ZoomIn">Zoom In</item>
|
|
48
|
-
<item action="ZoomOut" id="ZoomOut">Zoom Out</item>
|
|
49
|
-
<separator/>
|
|
50
|
-
<item action="Quality" id="Quality">Quality</item>
|
|
51
|
-
<item action="Pause" id="Pause">Pause</item>
|
|
52
|
-
<item action="Mute" id="Mute">Mute</item>
|
|
53
|
-
<separator/>
|
|
54
|
-
<item action="Find" id="Find">Find...</item>
|
|
55
|
-
<item action="FindAgain" id="FindAgain">Find Again</item>
|
|
56
|
-
<item action="Copy" id="Copy">Copy</item>
|
|
57
48
|
</menu>
|
|
58
|
-
|
|
59
49
|
`;
|
|
60
50
|
// Build the grammar. 'document' is the starting production
|
|
61
|
-
const grammar = buildGrammar(XmlGrammar, 'document'
|
|
51
|
+
const grammar = buildGrammar(XmlGrammar, 'document', {
|
|
52
|
+
unwrappedNonterminalNames: xmlGrammarUnwrappedNonterminalNames
|
|
53
|
+
});
|
|
62
54
|
// Parse the XML string
|
|
63
55
|
const parseTree = grammar.parse(xmlString);
|
|
64
|
-
|
|
56
|
+
const parseTreeJson = JSON.stringify(parseTree, undefined, 4);
|
|
57
|
+
log(parseTreeJson);
|
|
58
|
+
await writeFile('out/out.json', parseTreeJson);
|
|
65
59
|
}
|
|
66
60
|
async function testRegExpParser() {
|
|
67
|
-
const regExpString = /^([+]?[1]?(1 )?[-.+]?\(?\d{1}[- .+]*\d{1}[- .+]*\d{1}\)?[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1})$/.source
|
|
61
|
+
//const regExpString = /^([+]?[1]?(1 )?[-.+]?\(?\d{1}[- .+]*\d{1}[- .+]*\d{1}\)?[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1}[- .+]*\d{1})$/.source
|
|
68
62
|
//const regExpString = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.source
|
|
69
63
|
//const regExpString = /(?=.*[!@#$%^&*])^mongodb:\/\/(?<user>[a-zA-Z0-9]+):(?<pass>[a-zA-Z0-9!@#$%^&*]{8,})@(?<host>[a-z0-9.-]+):(?<port>\d{2,5})$/.source
|
|
70
|
-
|
|
71
|
-
const
|
|
64
|
+
const regExpString = /^(abcd)*ef+g/.source;
|
|
65
|
+
//const regExpString = '(abcd)(aa))'
|
|
66
|
+
const grammar = buildGrammar(RegExpGrammar, 'root', {
|
|
67
|
+
unwrappedNonterminalNames: regExpGrammarUnwrappedNonterminalNames
|
|
68
|
+
});
|
|
72
69
|
const parseTree = grammar.parse(regExpString);
|
|
73
70
|
const parseTreeJson = JSON.stringify(parseTree, undefined, 4);
|
|
74
71
|
log(parseTreeJson);
|
|
@@ -92,7 +89,10 @@ function test1() {
|
|
|
92
89
|
const result = grammar.parse(input);
|
|
93
90
|
console.log(JSON.stringify(result, undefined, 4));
|
|
94
91
|
}
|
|
92
|
+
//testParserError1()
|
|
93
|
+
//testParserError2()
|
|
95
94
|
//testJsonParser()
|
|
96
|
-
|
|
95
|
+
testXmlParser();
|
|
96
|
+
//testRegExpParser()
|
|
97
97
|
//test1()
|
|
98
98
|
//# sourceMappingURL=Test.js.map
|
package/dist/tests/Test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Test.js","sourceRoot":"","sources":["../../src/tests/Test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAe,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"Test.js","sourceRoot":"","sources":["../../src/tests/Test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import * as G from '../../exports/Exports.js';
|
|
2
2
|
export declare class JsonGrammar {
|
|
3
3
|
expression: () => G.Choice;
|
|
4
|
-
stringLiteral: G.PatternTerminal;
|
|
5
|
-
numberLiteral: G.PatternTerminal;
|
|
6
|
-
booleanLiteral: G.PatternTerminal;
|
|
7
|
-
nullLiteral: G.PatternTerminal;
|
|
4
|
+
stringLiteral: () => G.PatternTerminal;
|
|
5
|
+
numberLiteral: () => G.PatternTerminal;
|
|
6
|
+
booleanLiteral: () => G.PatternTerminal;
|
|
7
|
+
nullLiteral: () => G.PatternTerminal;
|
|
8
8
|
objectExpression: () => G.Production[];
|
|
9
|
-
objectPropertyExpression: () => (G.
|
|
9
|
+
objectPropertyExpression: () => ((() => G.Choice) | (() => G.PatternTerminal))[];
|
|
10
10
|
arrayExpression: () => G.Production[];
|
|
11
|
-
openingCurlyBrace: G.PatternTerminal;
|
|
12
|
-
closingCurlyBrace: G.PatternTerminal;
|
|
13
|
-
openingSquareBracket: G.PatternTerminal;
|
|
14
|
-
closingSquareBracket: G.PatternTerminal;
|
|
15
|
-
comma: G.PatternTerminal;
|
|
16
|
-
colons: G.PatternTerminal;
|
|
11
|
+
openingCurlyBrace: () => G.PatternTerminal;
|
|
12
|
+
closingCurlyBrace: () => G.PatternTerminal;
|
|
13
|
+
openingSquareBracket: () => G.PatternTerminal;
|
|
14
|
+
closingSquareBracket: () => G.PatternTerminal;
|
|
15
|
+
comma: () => G.PatternTerminal;
|
|
16
|
+
colons: () => G.PatternTerminal;
|
|
17
17
|
}
|
|
18
|
+
export declare const jsonGrammarUnwrappedNonterminalNames: G.GrammarNonterminalNames<JsonGrammar>;
|
|
18
19
|
//# sourceMappingURL=JsonGrammar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonGrammar.d.ts","sourceRoot":"","sources":["../../../src/tests/test-grammars/JsonGrammar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,0BAA0B,CAAA;AAG7C,qBAAa,WAAW;IACvB,UAAU,iBAOT;IAED,aAAa,
|
|
1
|
+
{"version":3,"file":"JsonGrammar.d.ts","sourceRoot":"","sources":["../../../src/tests/test-grammars/JsonGrammar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,0BAA0B,CAAA;AAG7C,qBAAa,WAAW;IACvB,UAAU,iBAOT;IAED,aAAa,0BAcX;IAEF,aAAa,0BAiBX;IAEF,cAAc,0BAQZ;IAEF,WAAW,0BAMT;IAEF,gBAAgB,uBASf;IAED,wBAAwB,yDAIvB;IAED,eAAe,uBASd;IAED,iBAAiB,0BAAgD;IACjE,iBAAiB,0BAAgD;IAEjE,oBAAoB,0BAAgD;IACpE,oBAAoB,0BAAgD;IAEpE,KAAK,0BAAgD;IACrD,MAAM,0BAAgD;CACtD;AAiBD,eAAO,MAAM,oCAAoC,EAAE,CAAC,CAAC,uBAAuB,CAAC,WAAW,CAavF,CAAA"}
|
|
@@ -2,7 +2,7 @@ import * as G from '../../exports/Exports.js';
|
|
|
2
2
|
import * as R from 'regexp-composer';
|
|
3
3
|
export class JsonGrammar {
|
|
4
4
|
expression = () => G.anyOf(this.stringLiteral, this.numberLiteral, this.booleanLiteral, this.nullLiteral, this.objectExpression, this.arrayExpression);
|
|
5
|
-
stringLiteral = G.pattern([
|
|
5
|
+
stringLiteral = () => G.pattern([
|
|
6
6
|
zeroOrMoreWhitespace,
|
|
7
7
|
'"',
|
|
8
8
|
R.captureAs('value', R.zeroOrMoreNonGreedy(R.anyChar)),
|
|
@@ -11,7 +11,7 @@ export class JsonGrammar {
|
|
|
11
11
|
}),
|
|
12
12
|
zeroOrMoreWhitespace,
|
|
13
13
|
]);
|
|
14
|
-
numberLiteral = G.pattern([
|
|
14
|
+
numberLiteral = () => G.pattern([
|
|
15
15
|
zeroOrMoreWhitespace,
|
|
16
16
|
R.captureAs('value', [
|
|
17
17
|
R.possibly('-'), // Sign
|
|
@@ -25,12 +25,12 @@ export class JsonGrammar {
|
|
|
25
25
|
]),
|
|
26
26
|
zeroOrMoreWhitespace,
|
|
27
27
|
]);
|
|
28
|
-
booleanLiteral = G.pattern([
|
|
28
|
+
booleanLiteral = () => G.pattern([
|
|
29
29
|
zeroOrMoreWhitespace,
|
|
30
30
|
R.captureAs('value', R.anyOf('true', 'false')),
|
|
31
31
|
zeroOrMoreWhitespace,
|
|
32
32
|
]);
|
|
33
|
-
nullLiteral = G.pattern([
|
|
33
|
+
nullLiteral = () => G.pattern([
|
|
34
34
|
zeroOrMoreWhitespace,
|
|
35
35
|
'null',
|
|
36
36
|
zeroOrMoreWhitespace,
|
|
@@ -56,12 +56,12 @@ export class JsonGrammar {
|
|
|
56
56
|
]),
|
|
57
57
|
this.closingSquareBracket
|
|
58
58
|
];
|
|
59
|
-
openingCurlyBrace = createPatternWithClearedWhitespace('{');
|
|
60
|
-
closingCurlyBrace = createPatternWithClearedWhitespace('}');
|
|
61
|
-
openingSquareBracket = createPatternWithClearedWhitespace('[');
|
|
62
|
-
closingSquareBracket = createPatternWithClearedWhitespace(']');
|
|
63
|
-
comma = createPatternWithClearedWhitespace(',');
|
|
64
|
-
colons = createPatternWithClearedWhitespace(':');
|
|
59
|
+
openingCurlyBrace = () => createPatternWithClearedWhitespace('{');
|
|
60
|
+
closingCurlyBrace = () => createPatternWithClearedWhitespace('}');
|
|
61
|
+
openingSquareBracket = () => createPatternWithClearedWhitespace('[');
|
|
62
|
+
closingSquareBracket = () => createPatternWithClearedWhitespace(']');
|
|
63
|
+
comma = () => createPatternWithClearedWhitespace(',');
|
|
64
|
+
colons = () => createPatternWithClearedWhitespace(':');
|
|
65
65
|
}
|
|
66
66
|
function createPatternWithClearedWhitespace(subpattern) {
|
|
67
67
|
return G.pattern([
|
|
@@ -71,4 +71,19 @@ function createPatternWithClearedWhitespace(subpattern) {
|
|
|
71
71
|
]);
|
|
72
72
|
}
|
|
73
73
|
const zeroOrMoreWhitespace = R.zeroOrMore(R.whitespace);
|
|
74
|
+
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
75
|
+
// Wrapped nonterminal names
|
|
76
|
+
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
77
|
+
export const jsonGrammarUnwrappedNonterminalNames = [
|
|
78
|
+
//'stringLiteral',
|
|
79
|
+
//'numberLiteral',
|
|
80
|
+
//'booleanLiteral',
|
|
81
|
+
//'nullLiteral',
|
|
82
|
+
'openingCurlyBrace',
|
|
83
|
+
'closingCurlyBrace',
|
|
84
|
+
'openingSquareBracket',
|
|
85
|
+
'closingSquareBracket',
|
|
86
|
+
'comma',
|
|
87
|
+
'colons',
|
|
88
|
+
];
|
|
74
89
|
//# sourceMappingURL=JsonGrammar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonGrammar.js","sourceRoot":"","sources":["../../../src/tests/test-grammars/JsonGrammar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,0BAA0B,CAAA;AAC7C,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAA;AAEpC,MAAM,OAAO,WAAW;IACvB,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CACzB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,eAAe,CACpB,CAAA;IAED,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"JsonGrammar.js","sourceRoot":"","sources":["../../../src/tests/test-grammars/JsonGrammar.ts"],"names":[],"mappings":"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"}
|