grammar-composer 0.6.2 → 0.7.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 +27 -19
- package/dist/parser/Builder.d.ts +3 -3
- package/dist/parser/Builder.d.ts.map +1 -1
- package/dist/parser/Builder.js +37 -37
- package/dist/parser/Builder.js.map +1 -1
- package/dist/parser/Grammar.d.ts +24 -24
- package/dist/parser/Grammar.d.ts.map +1 -1
- package/dist/parser/Grammar.js +11 -11
- package/dist/parser/Grammar.js.map +1 -1
- package/dist/parser/ParseError.js +6 -6
- package/dist/parser/ParseError.js.map +1 -1
- package/dist/parser/Parser.d.ts.map +1 -1
- package/dist/parser/Parser.js +36 -36
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/StaticAnalysis.d.ts +3 -3
- package/dist/parser/StaticAnalysis.d.ts.map +1 -1
- package/dist/parser/StaticAnalysis.js +6 -6
- package/dist/parser/StaticAnalysis.js.map +1 -1
- package/dist/parser/{TerminalToText.d.ts → TerminalFormatter.d.ts} +2 -2
- package/dist/parser/TerminalFormatter.d.ts.map +1 -0
- package/dist/parser/{TerminalToText.js → TerminalFormatter.js} +2 -2
- package/dist/parser/TerminalFormatter.js.map +1 -0
- package/dist/tests/Test.js +6 -6
- package/dist/tests/Test.js.map +1 -1
- package/dist/tests/test-grammars/JsonGrammar.d.ts +3 -3
- package/dist/tests/test-grammars/JsonGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/JsonGrammar.js +2 -2
- package/dist/tests/test-grammars/JsonGrammar.js.map +1 -1
- package/dist/tests/test-grammars/RegExpGrammar.d.ts +11 -11
- package/dist/tests/test-grammars/RegExpGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/RegExpGrammar.js +2 -2
- package/dist/tests/test-grammars/RegExpGrammar.js.map +1 -1
- package/dist/tests/test-grammars/XmlGrammar.d.ts +1 -1
- package/dist/tests/test-grammars/XmlGrammar.d.ts.map +1 -1
- package/dist/tests/test-grammars/XmlGrammar.js +2 -2
- package/dist/tests/test-grammars/XmlGrammar.js.map +1 -1
- package/package.json +2 -2
- package/src/parser/Builder.ts +42 -42
- package/src/parser/Grammar.ts +36 -36
- package/src/parser/ParseError.ts +6 -6
- package/src/parser/Parser.ts +38 -38
- package/src/parser/StaticAnalysis.ts +20 -18
- package/src/parser/{TerminalToText.ts → TerminalFormatter.ts} +1 -1
- package/src/tests/Test.ts +6 -6
- package/src/tests/test-grammars/JsonGrammar.ts +2 -2
- package/src/tests/test-grammars/RegExpGrammar.ts +2 -2
- package/src/tests/test-grammars/XmlGrammar.ts +2 -2
- package/dist/parser/TerminalToText.d.ts.map +0 -1
- package/dist/parser/TerminalToText.js.map +0 -1
package/src/parser/Parser.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isNumber } from '../utilities/Utilities.js'
|
|
2
|
-
import { Grammar,
|
|
2
|
+
import { Grammar, GrammarNode, Terminal, type Nonterminal } from './Grammar.js'
|
|
3
3
|
import { type FailedMatch, ParseError } from './ParseError.js'
|
|
4
4
|
|
|
5
5
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
@@ -34,22 +34,22 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
function tryParse(
|
|
38
|
-
if (isNumber(
|
|
39
|
-
return tryParseCached(
|
|
37
|
+
function tryParse(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
|
|
38
|
+
if (isNumber(grammarNode.cacheId)) {
|
|
39
|
+
return tryParseCached(grammarNode, startOffset)
|
|
40
40
|
} else {
|
|
41
|
-
return tryParseUncached(
|
|
41
|
+
return tryParseUncached(grammarNode, startOffset)
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
function tryParseCached(
|
|
46
|
-
const cacheId =
|
|
45
|
+
function tryParseCached(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
|
|
46
|
+
const cacheId = grammarNode.cacheId!
|
|
47
47
|
const cacheKey = (startOffset * cacheKeyOffsetMultiplier) + cacheId
|
|
48
48
|
|
|
49
49
|
if (parseResultsCache.has(cacheKey)) {
|
|
50
50
|
return parseResultsCache.get(cacheKey)!
|
|
51
51
|
} else {
|
|
52
|
-
const parseResult = tryParseUncached(
|
|
52
|
+
const parseResult = tryParseUncached(grammarNode, startOffset)
|
|
53
53
|
|
|
54
54
|
parseResultsCache.set(cacheKey, parseResult)
|
|
55
55
|
|
|
@@ -57,14 +57,14 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
function tryParseUncached(
|
|
61
|
-
const result =
|
|
60
|
+
function tryParseUncached(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
|
|
61
|
+
const result = tryParseNode(grammarNode, startOffset)
|
|
62
62
|
|
|
63
|
-
if (result === null &&
|
|
64
|
-
// An optional
|
|
63
|
+
if (result === null && grammarNode.optional === true) {
|
|
64
|
+
// An optional node that doesn't match is "skipped": it succeeds
|
|
65
65
|
// by consuming no input and producing no nodes. This uniformly
|
|
66
66
|
// implements the `possibly()` "or skip" semantics wherever the
|
|
67
|
-
//
|
|
67
|
+
// node appears (sequence members, repetition content, choice
|
|
68
68
|
// members, or as the content of a production itself).
|
|
69
69
|
return { endOffset: startOffset, nodes: undefined, skipped: true }
|
|
70
70
|
}
|
|
@@ -72,14 +72,14 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
72
72
|
return result
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
function
|
|
76
|
-
switch (
|
|
75
|
+
function tryParseNode(grammarNode: GrammarNode, startOffset: number): ParseResult | null {
|
|
76
|
+
switch (grammarNode.type) {
|
|
77
77
|
case 'StringTerminal': {
|
|
78
|
-
const target =
|
|
78
|
+
const target = grammarNode.content
|
|
79
79
|
const endOffset = startOffset + target.length
|
|
80
80
|
|
|
81
81
|
if (endOffset > inputLength) {
|
|
82
|
-
updateBestFailedMatchesIfNeeded(
|
|
82
|
+
updateBestFailedMatchesIfNeeded(grammarNode, startOffset)
|
|
83
83
|
|
|
84
84
|
return null
|
|
85
85
|
}
|
|
@@ -92,7 +92,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
92
92
|
nodes: undefined
|
|
93
93
|
}
|
|
94
94
|
} else {
|
|
95
|
-
updateBestFailedMatchesIfNeeded(
|
|
95
|
+
updateBestFailedMatchesIfNeeded(grammarNode, startOffset)
|
|
96
96
|
|
|
97
97
|
return null
|
|
98
98
|
}
|
|
@@ -101,10 +101,10 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
101
101
|
case 'PatternTerminal': {
|
|
102
102
|
const substringToMatch = inputString.substring(startOffset)
|
|
103
103
|
|
|
104
|
-
const matchResults =
|
|
104
|
+
const matchResults = grammarNode.regExp.exec(substringToMatch)
|
|
105
105
|
|
|
106
106
|
if (matchResults === null) {
|
|
107
|
-
updateBestFailedMatchesIfNeeded(
|
|
107
|
+
updateBestFailedMatchesIfNeeded(grammarNode, startOffset)
|
|
108
108
|
|
|
109
109
|
return null
|
|
110
110
|
}
|
|
@@ -177,9 +177,9 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
case 'Nonterminal': {
|
|
180
|
-
nonterminalStack.push(
|
|
180
|
+
nonterminalStack.push(grammarNode)
|
|
181
181
|
|
|
182
|
-
const result = tryParse(
|
|
182
|
+
const result = tryParse(grammarNode.content, startOffset)
|
|
183
183
|
|
|
184
184
|
nonterminalStack.pop()
|
|
185
185
|
|
|
@@ -194,9 +194,9 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
194
194
|
return { endOffset: startOffset, nodes: undefined, skipped: true }
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
const
|
|
197
|
+
const grammarNodeName = grammarNode.name
|
|
198
198
|
|
|
199
|
-
if (
|
|
199
|
+
if (grammarNode.unfolded) {
|
|
200
200
|
const newResult: ParseResult = {
|
|
201
201
|
endOffset: result.endOffset,
|
|
202
202
|
nodes: result.nodes
|
|
@@ -205,7 +205,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
205
205
|
return newResult
|
|
206
206
|
} else {
|
|
207
207
|
const newNode: ParseTreeNode = {
|
|
208
|
-
name:
|
|
208
|
+
name: grammarNodeName,
|
|
209
209
|
|
|
210
210
|
startOffset,
|
|
211
211
|
endOffset: result.endOffset,
|
|
@@ -228,14 +228,14 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
228
228
|
let successfulResults: ParseResult[] = []
|
|
229
229
|
let readOffset = startOffset
|
|
230
230
|
|
|
231
|
-
for (const
|
|
232
|
-
const
|
|
231
|
+
for (const node of grammarNode.members) {
|
|
232
|
+
const parseResult = tryParse(node, readOffset)
|
|
233
233
|
|
|
234
|
-
if (
|
|
235
|
-
successfulResults.push(
|
|
234
|
+
if (parseResult !== null) {
|
|
235
|
+
successfulResults.push(parseResult)
|
|
236
236
|
|
|
237
|
-
readOffset =
|
|
238
|
-
} else if (
|
|
237
|
+
readOffset = parseResult.endOffset
|
|
238
|
+
} else if (node.optional === false) {
|
|
239
239
|
return null
|
|
240
240
|
}
|
|
241
241
|
}
|
|
@@ -260,7 +260,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
260
260
|
const nodes: ParseTreeNode[] = []
|
|
261
261
|
|
|
262
262
|
while (true) {
|
|
263
|
-
const result = tryParse(
|
|
263
|
+
const result = tryParse(grammarNode.content, readOffset)
|
|
264
264
|
|
|
265
265
|
if (result === null) {
|
|
266
266
|
break
|
|
@@ -282,7 +282,7 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
282
282
|
endOffset: readOffset,
|
|
283
283
|
nodes: nodes.length > 0 ? nodes : undefined
|
|
284
284
|
}
|
|
285
|
-
} else if (
|
|
285
|
+
} else if (grammarNode.optional === true) {
|
|
286
286
|
return {
|
|
287
287
|
endOffset: startOffset,
|
|
288
288
|
nodes: undefined
|
|
@@ -295,13 +295,13 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
295
295
|
case 'Choice': {
|
|
296
296
|
let bestResult: ParseResult | null = null
|
|
297
297
|
|
|
298
|
-
for (const member of
|
|
298
|
+
for (const member of grammarNode.members) {
|
|
299
299
|
const result = tryParse(member, startOffset)
|
|
300
300
|
|
|
301
301
|
if (result !== null && (bestResult === null || result.endOffset > bestResult.endOffset)) {
|
|
302
302
|
bestResult = result
|
|
303
303
|
|
|
304
|
-
if (
|
|
304
|
+
if (grammarNode.exhaustive === false) {
|
|
305
305
|
break
|
|
306
306
|
}
|
|
307
307
|
}
|
|
@@ -311,12 +311,12 @@ export function parse(inputString: string, grammar: Grammar<any>, options?: Pars
|
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
default: {
|
|
314
|
-
throw new Error(`
|
|
314
|
+
throw new Error(`Unrecognized grammar node type '${(grammarNode as any).type}'.`)
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
const result = tryParse(grammar.
|
|
319
|
+
const result = tryParse(grammar.rootNode, 0)
|
|
320
320
|
|
|
321
321
|
if (result && result.endOffset >= inputLength) {
|
|
322
322
|
return result.nodes ?? []
|
|
@@ -341,7 +341,7 @@ export interface ParseResult {
|
|
|
341
341
|
endOffset: number
|
|
342
342
|
nodes: ParseTreeNode[] | undefined
|
|
343
343
|
|
|
344
|
-
// Marks a result produced by an optional
|
|
344
|
+
// Marks a result produced by an optional node that was "skipped" (it
|
|
345
345
|
// didn't match, so the parse succeeded by consuming no input and producing
|
|
346
346
|
// no nodes). Set internally by the parser; a receiving `Nonterminal` uses
|
|
347
347
|
// it to avoid creating a node for skipped content.
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { Pattern } from 'regexp-composer'
|
|
2
2
|
import { isArray, isBoolean, isString } from '../utilities/Utilities.js'
|
|
3
|
-
import {
|
|
3
|
+
import { GrammarNode } from './Grammar.js'
|
|
4
4
|
|
|
5
5
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
6
6
|
// Internal static analysis methods
|
|
7
7
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
8
|
-
export function detectAndAnnotateOptionalNodes(rootNode:
|
|
9
|
-
const visitedNodes = new Set<
|
|
8
|
+
export function detectAndAnnotateOptionalNodes(rootNode: GrammarNode) {
|
|
9
|
+
const visitedNodes = new Set<GrammarNode>()
|
|
10
10
|
|
|
11
|
-
const resolvedNodes = new Map<
|
|
12
|
-
const unresolvedNodes = new Map<
|
|
11
|
+
const resolvedNodes = new Map<GrammarNode, boolean>()
|
|
12
|
+
const unresolvedNodes = new Map<GrammarNode, { dependencies: Set<GrammarNode>, isChoice: boolean }>()
|
|
13
13
|
|
|
14
|
-
function processDepthFirst(node:
|
|
14
|
+
function processDepthFirst(node: GrammarNode): boolean | undefined {
|
|
15
15
|
if (visitedNodes.has(node)) {
|
|
16
16
|
return resolvedNodes.get(node)
|
|
17
17
|
}
|
|
@@ -46,19 +46,19 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
case 'Sequence': {
|
|
49
|
-
const dependencies = new Set<
|
|
49
|
+
const dependencies = new Set<GrammarNode>()
|
|
50
50
|
|
|
51
51
|
let hasNonOptionalResolvedMember = false
|
|
52
52
|
|
|
53
|
-
for (const
|
|
54
|
-
const result = processDepthFirst(
|
|
53
|
+
for (const member of node.members) {
|
|
54
|
+
const result = processDepthFirst(member)
|
|
55
55
|
|
|
56
56
|
if (isBoolean(result)) {
|
|
57
57
|
if (result === false) {
|
|
58
58
|
hasNonOptionalResolvedMember = true
|
|
59
59
|
}
|
|
60
60
|
} else {
|
|
61
|
-
dependencies.add(
|
|
61
|
+
dependencies.add(member)
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -82,18 +82,18 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
case 'Choice': {
|
|
85
|
-
const dependencies = new Set<
|
|
85
|
+
const dependencies = new Set<GrammarNode>()
|
|
86
86
|
let hasOptionalResolvedMember = false
|
|
87
87
|
|
|
88
|
-
for (const
|
|
89
|
-
const result = processDepthFirst(
|
|
88
|
+
for (const member of node.members) {
|
|
89
|
+
const result = processDepthFirst(member)
|
|
90
90
|
|
|
91
91
|
if (isBoolean(result)) {
|
|
92
92
|
if (result === true) {
|
|
93
93
|
hasOptionalResolvedMember = true
|
|
94
94
|
}
|
|
95
95
|
} else {
|
|
96
|
-
dependencies.add(
|
|
96
|
+
dependencies.add(member)
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -132,7 +132,7 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
|
|
|
132
132
|
// and we should exit the loop.
|
|
133
133
|
let atLastOneDependencyResolvedInAnyNode = false
|
|
134
134
|
|
|
135
|
-
const nodesToDelete:
|
|
135
|
+
const nodesToDelete: GrammarNode[] = []
|
|
136
136
|
|
|
137
137
|
// Scan the unresolved nodes to locate any new resolved dependencies
|
|
138
138
|
for (const [node, { dependencies, isChoice }] of unresolvedNodes) {
|
|
@@ -151,12 +151,14 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
|
|
|
151
151
|
if (value === true) {
|
|
152
152
|
resolvedNodes.set(node, true)
|
|
153
153
|
nodeResolved = true
|
|
154
|
+
|
|
154
155
|
break
|
|
155
156
|
}
|
|
156
157
|
} else {
|
|
157
158
|
if (value === false) {
|
|
158
159
|
resolvedNodes.set(node, false)
|
|
159
160
|
nodeResolved = true
|
|
161
|
+
|
|
160
162
|
break
|
|
161
163
|
}
|
|
162
164
|
}
|
|
@@ -204,10 +206,10 @@ export function detectAndAnnotateOptionalNodes(rootNode: GrammarElement) {
|
|
|
204
206
|
}
|
|
205
207
|
}
|
|
206
208
|
|
|
207
|
-
export function detectAndErrorOnLeftRecursion(rootNode:
|
|
208
|
-
const currentlyIteratedNodes = new Set<
|
|
209
|
+
export function detectAndErrorOnLeftRecursion(rootNode: GrammarNode) {
|
|
210
|
+
const currentlyIteratedNodes = new Set<GrammarNode>()
|
|
209
211
|
|
|
210
|
-
function detect(node:
|
|
212
|
+
function detect(node: GrammarNode) {
|
|
211
213
|
if (currentlyIteratedNodes.has(node)) {
|
|
212
214
|
if (node.type === 'Nonterminal') {
|
|
213
215
|
throw new Error(`Detected left recursion for nonterminal '${node.name}'.`)
|
|
@@ -4,7 +4,7 @@ import type { PatternTerminal, StringTerminal, Terminal } from './Grammar.js'
|
|
|
4
4
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
5
5
|
// Terminal to text conversion
|
|
6
6
|
/////////////////////////////////////////////////////////////////////////////////////////////////
|
|
7
|
-
export class
|
|
7
|
+
export class TerminalFormatter {
|
|
8
8
|
constructor(private stringifiedLengthLimit: number) {
|
|
9
9
|
}
|
|
10
10
|
|
package/src/tests/Test.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Timer } from '../utilities/Timer.js'
|
|
2
2
|
import { jsonSample1, jsonSample2 } from './test-data/TestData.js'
|
|
3
3
|
import { anyOf, buildGrammar } from '../exports/Exports.js'
|
|
4
|
-
import { JsonGrammar,
|
|
5
|
-
import { XmlGrammar,
|
|
6
|
-
import { RegExpGrammar,
|
|
4
|
+
import { JsonGrammar, jsonGrammarUnfoldedNonterminalNames } from './test-grammars/JsonGrammar.js'
|
|
5
|
+
import { XmlGrammar, xmlGrammarUnfoldedNonterminalNames } from './test-grammars/XmlGrammar.js'
|
|
6
|
+
import { RegExpGrammar, regExpGrammarUnfoldedNonterminalNames } from './test-grammars/RegExpGrammar.js'
|
|
7
7
|
import { writeFile } from 'fs/promises'
|
|
8
8
|
import { SimpleTestGrammar1 } from './test-grammars/SimpleTestGrammar1.js'
|
|
9
9
|
|
|
@@ -31,7 +31,7 @@ function testJsonParser() {
|
|
|
31
31
|
const jsonString = jsonSample1
|
|
32
32
|
|
|
33
33
|
const grammar = buildGrammar(JsonGrammar, 'expression', {
|
|
34
|
-
|
|
34
|
+
unfoldedNonterminalNames: jsonGrammarUnfoldedNonterminalNames
|
|
35
35
|
})
|
|
36
36
|
|
|
37
37
|
const iterations = 1000
|
|
@@ -66,7 +66,7 @@ async function testXmlParser() {
|
|
|
66
66
|
`
|
|
67
67
|
// Build the grammar. 'document' is the starting production
|
|
68
68
|
const grammar = buildGrammar(XmlGrammar, 'document', {
|
|
69
|
-
|
|
69
|
+
unfoldedNonterminalNames: xmlGrammarUnfoldedNonterminalNames
|
|
70
70
|
})
|
|
71
71
|
|
|
72
72
|
// Parse the XML string
|
|
@@ -87,7 +87,7 @@ async function testRegExpParser() {
|
|
|
87
87
|
//const regExpString = '(abcd)(aa))'
|
|
88
88
|
|
|
89
89
|
const grammar = buildGrammar(RegExpGrammar, 'root', {
|
|
90
|
-
|
|
90
|
+
unfoldedNonterminalNames: regExpGrammarUnfoldedNonterminalNames
|
|
91
91
|
})
|
|
92
92
|
|
|
93
93
|
const parseTree = grammar.parse(regExpString)
|
|
@@ -115,9 +115,9 @@ function createPatternWithClearedWhitespace(subpattern: R.Pattern) {
|
|
|
115
115
|
const zeroOrMoreWhitespace = R.zeroOrMore(R.whitespace)
|
|
116
116
|
|
|
117
117
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
118
|
-
//
|
|
118
|
+
// Unfolded nonterminal list
|
|
119
119
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
120
|
-
export const
|
|
120
|
+
export const jsonGrammarUnfoldedNonterminalNames: G.GrammarNonterminalNames<JsonGrammar> = [
|
|
121
121
|
//'stringLiteral',
|
|
122
122
|
//'numberLiteral',
|
|
123
123
|
//'booleanLiteral',
|
|
@@ -394,9 +394,9 @@ const escapedChars = {
|
|
|
394
394
|
}
|
|
395
395
|
|
|
396
396
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
397
|
-
//
|
|
397
|
+
// Unfolded nonterminal list
|
|
398
398
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
399
|
-
export const
|
|
399
|
+
export const regExpGrammarUnfoldedNonterminalNames: G.GrammarNonterminalNames<RegExpGrammar> = [
|
|
400
400
|
'disjunctionOrSequence',
|
|
401
401
|
'group',
|
|
402
402
|
'backReference',
|
|
@@ -144,9 +144,9 @@ const quotedString = R.anyOf(
|
|
|
144
144
|
)
|
|
145
145
|
|
|
146
146
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
147
|
-
//
|
|
147
|
+
// Unfolded nonterminal list
|
|
148
148
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
|
149
|
-
export const
|
|
149
|
+
export const xmlGrammarUnfoldedNonterminalNames: G.GrammarNonterminalNames<XmlGrammar> = [
|
|
150
150
|
'openingTagStart',
|
|
151
151
|
'tagEnd',
|
|
152
152
|
'declarationTagOpening',
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalToText.d.ts","sourceRoot":"","sources":["../../src/parser/TerminalToText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK7E,qBAAa,cAAc;IACd,OAAO,CAAC,sBAAsB;IAA1C,YAAoB,sBAAsB,EAAE,MAAM,EACjD;IAED,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAM5C;IAED,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAExD;IAED,wBAAwB,CAAC,QAAQ,EAAE,eAAe,UAmBjD;IAED,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CA+FzC;IAED,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;IAED,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAgBjD;IAED,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMvD;CACD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgB/C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalToText.js","sourceRoot":"","sources":["../../src/parser/TerminalToText.ts"],"names":[],"mappings":"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"}
|