occam-parsers 23.0.146 → 23.0.148
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/example.js +9364 -8412
- package/lib/bnf/parser.js +4 -1
- package/lib/common/parser.js +17 -1
- package/lib/definition/choiceOfParts.js +2 -3
- package/lib/definition/definition.js +6 -2
- package/lib/definition/definitions.js +2 -2
- package/lib/definition/document.js +6 -2
- package/lib/definition/partChoice.js +6 -2
- package/lib/definition/partRule/nonTerminal/ruleName.js +6 -2
- package/lib/definition/partRule/nonTerminal.js +6 -2
- package/lib/definition/partRule/terminal.js +6 -2
- package/lib/definition/rule.js +9 -2
- package/lib/definition/sequenceOfParts.js +2 -2
- package/lib/mixins/parser.js +2 -2
- package/lib/node/bnf/choiceOfParts.js +2 -2
- package/lib/node/bnf/definition.js +7 -2
- package/lib/node/bnf/definitions.js +2 -2
- package/lib/node/bnf/document.js +2 -2
- package/lib/node/bnf/{part/nonTerminal.js → nonTerminalPart.js} +5 -5
- package/lib/node/bnf/oneOneOrMoreQuantifier.js +107 -0
- package/lib/node/bnf/optionalQuantifier.js +107 -0
- package/lib/node/bnf/part.js +4 -4
- package/lib/node/bnf/partChoice.js +7 -2
- package/lib/node/bnf/rule.js +3 -3
- package/lib/node/bnf/sequenceOfParts.js +2 -2
- package/lib/node/bnf/{part/terminal.js → terminalPart.js} +2 -2
- package/lib/node/bnf/zeroOneOrMoreQuantifier.js +107 -0
- package/lib/node/nonTerminal.js +2 -2
- package/lib/nonTerminalNodeMap.js +62 -0
- package/lib/rule/bnf/callAheadModifier.js +3 -4
- package/lib/rule/bnf/choiceOfParts.js +4 -5
- package/lib/rule/bnf/definition.js +4 -5
- package/lib/rule/bnf/definitions.js +4 -5
- package/lib/rule/bnf/document.js +4 -5
- package/lib/rule/bnf/endOfLine.js +3 -4
- package/lib/rule/bnf/epsilon.js +3 -4
- package/lib/rule/bnf/error.js +4 -5
- package/lib/rule/bnf/name.js +4 -5
- package/lib/rule/bnf/noWhitespacePart.js +4 -5
- package/lib/rule/bnf/nonTerminalPart.js +8 -4
- package/lib/rule/bnf/oneOrMoreQuantifier.js +3 -4
- package/lib/rule/bnf/opacityModifier.js +3 -4
- package/lib/rule/bnf/optionalQuantifier.js +3 -4
- package/lib/rule/bnf/part.js +3 -4
- package/lib/rule/bnf/partChoice.js +4 -5
- package/lib/rule/bnf/precedence.js +4 -5
- package/lib/rule/bnf/quantifier.js +10 -4
- package/lib/rule/bnf/regularExpression.js +3 -4
- package/lib/rule/bnf/rule.js +4 -5
- package/lib/rule/bnf/ruleName.js +3 -4
- package/lib/rule/bnf/sequenceOfParts.js +4 -5
- package/lib/rule/bnf/significantTokenType.js +4 -5
- package/lib/rule/bnf/startOfContentPart.js +4 -5
- package/lib/rule/bnf/terminalPart.js +20 -4
- package/lib/rule/bnf/terminalSymbol.js +3 -4
- package/lib/rule/bnf/wildcard.js +3 -4
- package/lib/rule/bnf/zeroOrMoreQuantifier.js +3 -4
- package/lib/rule.js +8 -22
- package/lib/ruleNames.js +85 -85
- package/lib/state.js +26 -5
- package/lib/utilities/bnf.js +4 -4
- package/package.json +1 -1
- package/src/bnf/parser.js +5 -0
- package/src/common/parser.js +5 -0
- package/src/definition/choiceOfParts.js +5 -7
- package/src/definition/definition.js +10 -3
- package/src/definition/definitions.js +3 -2
- package/src/definition/document.js +10 -3
- package/src/definition/partChoice.js +10 -3
- package/src/definition/partRule/nonTerminal/ruleName.js +10 -3
- package/src/definition/partRule/nonTerminal.js +10 -3
- package/src/definition/partRule/terminal.js +10 -3
- package/src/definition/rule.js +18 -7
- package/src/definition/sequenceOfParts.js +4 -3
- package/src/mixins/parser.js +2 -1
- package/src/node/bnf/choiceOfParts.js +4 -3
- package/src/node/bnf/definition.js +12 -4
- package/src/node/bnf/definitions.js +4 -3
- package/src/node/bnf/document.js +4 -3
- package/src/node/bnf/{part/nonTerminal.js → nonTerminalPart.js} +5 -4
- package/src/node/bnf/oneOneOrMoreQuantifier.js +7 -0
- package/src/node/bnf/optionalQuantifier.js +7 -0
- package/src/node/bnf/part.js +4 -4
- package/src/node/bnf/partChoice.js +12 -4
- package/src/node/bnf/rule.js +5 -4
- package/src/node/bnf/sequenceOfParts.js +4 -3
- package/src/node/bnf/{part/terminal.js → terminalPart.js} +1 -1
- package/src/node/bnf/zeroOneOrMoreQuantifier.js +7 -0
- package/src/node/nonTerminal.js +1 -1
- package/src/nonTerminalNodeMap.js +92 -0
- package/src/rule/bnf/callAheadModifier.js +3 -5
- package/src/rule/bnf/choiceOfParts.js +3 -5
- package/src/rule/bnf/definition.js +3 -5
- package/src/rule/bnf/definitions.js +3 -5
- package/src/rule/bnf/document.js +3 -5
- package/src/rule/bnf/endOfLine.js +3 -5
- package/src/rule/bnf/epsilon.js +3 -5
- package/src/rule/bnf/error.js +3 -5
- package/src/rule/bnf/name.js +3 -5
- package/src/rule/bnf/noWhitespacePart.js +3 -5
- package/src/rule/bnf/nonTerminalPart.js +13 -7
- package/src/rule/bnf/oneOrMoreQuantifier.js +3 -5
- package/src/rule/bnf/opacityModifier.js +3 -5
- package/src/rule/bnf/optionalQuantifier.js +3 -5
- package/src/rule/bnf/part.js +3 -5
- package/src/rule/bnf/partChoice.js +3 -5
- package/src/rule/bnf/precedence.js +3 -5
- package/src/rule/bnf/quantifier.js +16 -8
- package/src/rule/bnf/regularExpression.js +3 -5
- package/src/rule/bnf/rule.js +3 -5
- package/src/rule/bnf/ruleName.js +3 -5
- package/src/rule/bnf/sequenceOfParts.js +3 -5
- package/src/rule/bnf/significantTokenType.js +3 -5
- package/src/rule/bnf/startOfContentPart.js +3 -5
- package/src/rule/bnf/terminalPart.js +46 -22
- package/src/rule/bnf/terminalSymbol.js +3 -5
- package/src/rule/bnf/wildcard.js +3 -5
- package/src/rule/bnf/zeroOrMoreQuantifier.js +3 -5
- package/src/rule.js +7 -17
- package/src/ruleNames.js +28 -28
- package/src/state.js +19 -3
- package/src/utilities/bnf.js +4 -4
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Rule from "../../rule";
|
|
4
|
-
import StartOfContentPartBNFNode from "../../node/bnf/startOfContentPart";
|
|
5
4
|
import StartOfContentPartDefinition from "../../definition/startOfContentPart";
|
|
6
5
|
|
|
7
|
-
import {
|
|
6
|
+
import { START_OF_CONTENT_PART_RULE_NAME } from "../../ruleNames";
|
|
8
7
|
|
|
9
8
|
export default class StartOfContentPartBNFRule extends Rule {
|
|
10
9
|
static fromNothing() {
|
|
11
10
|
const startOfContentPartDefinition = StartOfContentPartDefinition.fromNothing(),
|
|
12
|
-
name =
|
|
11
|
+
name = START_OF_CONTENT_PART_RULE_NAME, ///
|
|
13
12
|
opacity = null,
|
|
14
13
|
definitions = [
|
|
15
14
|
startOfContentPartDefinition
|
|
16
15
|
],
|
|
17
|
-
|
|
18
|
-
startOfContentPartRule = new StartOfContentPartBNFRule(name, opacity, definitions, NonTerminalNode);
|
|
16
|
+
startOfContentPartRule = new StartOfContentPartBNFRule(name, opacity, definitions);
|
|
19
17
|
|
|
20
18
|
return startOfContentPartRule;
|
|
21
19
|
}
|
|
@@ -2,29 +2,54 @@
|
|
|
2
2
|
|
|
3
3
|
import Rule from "../../rule";
|
|
4
4
|
import RuleNameDefinition from "../../definition/ruleName";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
significantTokenTypeRuleName } from "../../ruleNames";
|
|
5
|
+
|
|
6
|
+
import { EPSILON_RULE_NAME,
|
|
7
|
+
WILDCARD_RULE_NAME,
|
|
8
|
+
END_OF_LINE_RULE_NAME,
|
|
9
|
+
TERMINAL_PART_RULE_NAME,
|
|
10
|
+
TERMINAL_SYMBOL_RULE_NAME,
|
|
11
|
+
NO_WHITESPACE_PART_RULE_NAME,
|
|
12
|
+
REGULAR_EXPRESSION_RULE_NAME,
|
|
13
|
+
START_OF_CONTENT_PART_RULE_NAME,
|
|
14
|
+
SIGNIFICANT_TOKEN_TYPE_RULE_NAME } from "../../ruleNames";
|
|
16
15
|
|
|
17
16
|
export default class TerminalPartBNFRule extends Rule {
|
|
18
17
|
static fromNothing() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
let ruleName;
|
|
19
|
+
|
|
20
|
+
const name = TERMINAL_PART_RULE_NAME;
|
|
21
|
+
|
|
22
|
+
ruleName = EPSILON_RULE_NAME;
|
|
23
|
+
|
|
24
|
+
const epsilonRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
25
|
+
|
|
26
|
+
ruleName = WILDCARD_RULE_NAME;
|
|
27
|
+
|
|
28
|
+
const wildcardRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
29
|
+
|
|
30
|
+
ruleName = END_OF_LINE_RULE_NAME;
|
|
31
|
+
|
|
32
|
+
const endOfLineRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
33
|
+
|
|
34
|
+
ruleName = TERMINAL_SYMBOL_RULE_NAME;
|
|
35
|
+
|
|
36
|
+
const terminalSymbolRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
37
|
+
|
|
38
|
+
ruleName = NO_WHITESPACE_PART_RULE_NAME;
|
|
39
|
+
|
|
40
|
+
const noWhitespacePartRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
41
|
+
|
|
42
|
+
ruleName = REGULAR_EXPRESSION_RULE_NAME;
|
|
43
|
+
|
|
44
|
+
const regularExpressionRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
45
|
+
|
|
46
|
+
ruleName = START_OF_CONTENT_PART_RULE_NAME;
|
|
47
|
+
|
|
48
|
+
const startOfContentPartRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName);
|
|
49
|
+
|
|
50
|
+
ruleName = SIGNIFICANT_TOKEN_TYPE_RULE_NAME;
|
|
51
|
+
|
|
52
|
+
const significantTokenTypeRuleNameDefinition = RuleNameDefinition.fromRuleName(ruleName),
|
|
28
53
|
opacity = null,
|
|
29
54
|
definitions = [
|
|
30
55
|
significantTokenTypeRuleNameDefinition,
|
|
@@ -36,8 +61,7 @@ export default class TerminalPartBNFRule extends Rule {
|
|
|
36
61
|
noWhitespacePartRuleNameDefinition,
|
|
37
62
|
startOfContentPartRuleNameDefinition
|
|
38
63
|
],
|
|
39
|
-
|
|
40
|
-
terminalPartRule = new TerminalPartBNFRule(name, opacity, definitions, NonTerminalNode);
|
|
64
|
+
terminalPartRule = new TerminalPartBNFRule(name, opacity, definitions);
|
|
41
65
|
|
|
42
66
|
return terminalPartRule;
|
|
43
67
|
}
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
import { types } from "occam-lexers";
|
|
4
4
|
|
|
5
5
|
import Rule from "../../rule";
|
|
6
|
-
import TerminalSymbolBNFNode from "../../node/bnf/terminalSymbol";
|
|
7
6
|
import SignificantTokenTypeDefinition from "../../definition/significantTokenType";
|
|
8
7
|
|
|
9
|
-
import {
|
|
8
|
+
import { TERMINAL_SYMBOL_RULE_NAME } from "../../ruleNames";
|
|
10
9
|
|
|
11
10
|
const { stringLiteralType } = types;
|
|
12
11
|
|
|
@@ -14,13 +13,12 @@ export default class TerminalSymbolBNFRule extends Rule {
|
|
|
14
13
|
static fromNothing() {
|
|
15
14
|
const significantTokenType = stringLiteralType, ///
|
|
16
15
|
stringLiteralSignificantTokenTypeDefinition = SignificantTokenTypeDefinition.fromSignificantTokenType(significantTokenType),
|
|
17
|
-
name =
|
|
16
|
+
name = TERMINAL_SYMBOL_RULE_NAME, ///
|
|
18
17
|
opacity = null,
|
|
19
18
|
definitions = [
|
|
20
19
|
stringLiteralSignificantTokenTypeDefinition
|
|
21
20
|
],
|
|
22
|
-
|
|
23
|
-
terminalSymbolRule = new TerminalSymbolBNFRule(name, opacity, definitions, NonTerminalNode);
|
|
21
|
+
terminalSymbolRule = new TerminalSymbolBNFRule(name, opacity, definitions);
|
|
24
22
|
|
|
25
23
|
return terminalSymbolRule;
|
|
26
24
|
}
|
package/src/rule/bnf/wildcard.js
CHANGED
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
import { specialSymbols } from "occam-lexers";
|
|
4
4
|
|
|
5
5
|
import Rule from "../../rule";
|
|
6
|
-
import WildcardBNFNode from "../../node/bnf/wildcard";
|
|
7
6
|
import TerminalSymbolDefinition from "../../definition/terminalSymbol";
|
|
8
7
|
|
|
9
|
-
import {
|
|
8
|
+
import { WILDCARD_RULE_NAME } from "../../ruleNames";
|
|
10
9
|
|
|
11
10
|
const { wildcard } = specialSymbols;
|
|
12
11
|
|
|
@@ -14,13 +13,12 @@ export default class WildcardBNFRule extends Rule {
|
|
|
14
13
|
static fromNothing() {
|
|
15
14
|
const content = wildcard, ///
|
|
16
15
|
wildcardTerminalSymbolDefinition = TerminalSymbolDefinition.fromContent(content),
|
|
17
|
-
name =
|
|
16
|
+
name = WILDCARD_RULE_NAME, ///
|
|
18
17
|
opacity = null,
|
|
19
18
|
definitions = [
|
|
20
19
|
wildcardTerminalSymbolDefinition
|
|
21
20
|
],
|
|
22
|
-
|
|
23
|
-
wildcardRule = new WildcardBNFRule(name, opacity, definitions, NonTerminalNode);
|
|
21
|
+
wildcardRule = new WildcardBNFRule(name, opacity, definitions);
|
|
24
22
|
|
|
25
23
|
return wildcardRule;
|
|
26
24
|
}
|
|
@@ -3,24 +3,22 @@
|
|
|
3
3
|
import { specialSymbols } from "occam-lexers";
|
|
4
4
|
|
|
5
5
|
import Rule from "../../rule";
|
|
6
|
-
import QuantifierBNFNode from "../../node/bnf/quantifier";
|
|
7
6
|
import QuantifierRuleDefinition from "../../definition/quantifierRule";
|
|
8
7
|
|
|
9
|
-
import {
|
|
8
|
+
import { ZERO_OR_MORE_QUANTIFIER_RULE_NAME } from "../../ruleNames";
|
|
10
9
|
|
|
11
10
|
const { asterisk } = specialSymbols;
|
|
12
11
|
|
|
13
12
|
export default class ZeroOrMoreQuantifierBNFRule extends Rule {
|
|
14
13
|
static fromNothing() {
|
|
15
|
-
const name =
|
|
14
|
+
const name = ZERO_OR_MORE_QUANTIFIER_RULE_NAME, ///
|
|
16
15
|
specialSymbol = asterisk, ///
|
|
17
16
|
zeroOrMoreQuantifierRuleDefinition = QuantifierRuleDefinition.fromSpecialSymbol(specialSymbol),
|
|
18
17
|
opacity = null,
|
|
19
18
|
definitions = [
|
|
20
19
|
zeroOrMoreQuantifierRuleDefinition
|
|
21
20
|
],
|
|
22
|
-
|
|
23
|
-
zeroOrMoreQuantifierRule = new ZeroOrMoreQuantifierBNFRule(name, opacity, definitions, NonTerminalNode);
|
|
21
|
+
zeroOrMoreQuantifierRule = new ZeroOrMoreQuantifierBNFRule(name, opacity, definitions);
|
|
24
22
|
|
|
25
23
|
return zeroOrMoreQuantifierRule;
|
|
26
24
|
}
|
package/src/rule.js
CHANGED
|
@@ -10,11 +10,10 @@ const { clear } = arrayUtilities,
|
|
|
10
10
|
{ opaque: opaqueSpecialSymbol, semiOpaque: semiOpaqueSpecialSymbol } = specialSymbols;
|
|
11
11
|
|
|
12
12
|
export default class Rule {
|
|
13
|
-
constructor(name, opacity, definitions
|
|
13
|
+
constructor(name, opacity, definitions) {
|
|
14
14
|
this.name = name;
|
|
15
15
|
this.opacity = opacity;
|
|
16
16
|
this.definitions = definitions;
|
|
17
|
-
this.NonTerminalNode = NonTerminalNode;
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
getName() {
|
|
@@ -29,10 +28,6 @@ export default class Rule {
|
|
|
29
28
|
return this.definitions;
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
getNonTerminalNode() {
|
|
33
|
-
return this.NonTerminalNode;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
31
|
setName(name) {
|
|
37
32
|
this.name = name;
|
|
38
33
|
}
|
|
@@ -45,10 +40,6 @@ export default class Rule {
|
|
|
45
40
|
this.definitions = definitions;
|
|
46
41
|
}
|
|
47
42
|
|
|
48
|
-
setNonTerminalNode(NonTerminalNode) {
|
|
49
|
-
this.NonTerminalNode = NonTerminalNode;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
43
|
isOpaque() {
|
|
53
44
|
const opaque = (this.opacity === opaqueSpecialSymbol);
|
|
54
45
|
|
|
@@ -73,7 +64,8 @@ export default class Rule {
|
|
|
73
64
|
const opacity = this.opacity,
|
|
74
65
|
ruleName = this.name, ///
|
|
75
66
|
childNodes = [],
|
|
76
|
-
|
|
67
|
+
NonTerminalNode = state.NonTerminalNodeFromRuleName(ruleName),
|
|
68
|
+
nonTerminalNode = NonTerminalNode.fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity),
|
|
77
69
|
savedPrecedence = state.getSavedPrecedence();
|
|
78
70
|
|
|
79
71
|
let node = nonTerminalNode; ///
|
|
@@ -102,7 +94,7 @@ export default class Rule {
|
|
|
102
94
|
node.setChildNodesParentNode();
|
|
103
95
|
}
|
|
104
96
|
|
|
105
|
-
const rewrittenNonTerminalNode = nonTerminalNode.rewrite();
|
|
97
|
+
const rewrittenNonTerminalNode = nonTerminalNode.rewrite(state);
|
|
106
98
|
|
|
107
99
|
if (rewrittenNonTerminalNode !== null) {
|
|
108
100
|
if (parsed) {
|
|
@@ -217,10 +209,8 @@ ${this.name}${opacityString}${padding} ::= ${definitionsString}${semicolonString
|
|
|
217
209
|
return string;
|
|
218
210
|
}
|
|
219
211
|
|
|
220
|
-
static
|
|
221
|
-
if (
|
|
222
|
-
NonTerminalNode = definitions; ///
|
|
223
|
-
|
|
212
|
+
static fromNameOpacityAndDefinitions(Class, name, opacity, definitions) {
|
|
213
|
+
if (definitions === undefined) {
|
|
224
214
|
definitions = opacity; ///
|
|
225
215
|
|
|
226
216
|
opacity = name; ///
|
|
@@ -230,7 +220,7 @@ ${this.name}${opacityString}${padding} ::= ${definitionsString}${semicolonString
|
|
|
230
220
|
Class = Rule; ///
|
|
231
221
|
}
|
|
232
222
|
|
|
233
|
-
const rule = new Class(name, opacity, definitions
|
|
223
|
+
const rule = new Class(name, opacity, definitions);
|
|
234
224
|
|
|
235
225
|
return rule;
|
|
236
226
|
}
|
package/src/ruleNames.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export const
|
|
4
|
-
export const
|
|
5
|
-
export const
|
|
6
|
-
export const
|
|
7
|
-
export const
|
|
8
|
-
export const
|
|
9
|
-
export const
|
|
10
|
-
export const
|
|
11
|
-
export const
|
|
12
|
-
export const
|
|
13
|
-
export const
|
|
14
|
-
export const
|
|
15
|
-
export const
|
|
16
|
-
export const
|
|
17
|
-
export const
|
|
18
|
-
export const
|
|
19
|
-
export const
|
|
20
|
-
export const
|
|
21
|
-
export const
|
|
22
|
-
export const
|
|
23
|
-
export const
|
|
24
|
-
export const
|
|
25
|
-
export const
|
|
26
|
-
export const
|
|
27
|
-
export const
|
|
28
|
-
export const
|
|
29
|
-
export const
|
|
30
|
-
export const
|
|
3
|
+
export const NAME_RULE_NAME = "name";
|
|
4
|
+
export const PART_RULE_NAME = "part";
|
|
5
|
+
export const RULE_RULE_NAME = "rule";
|
|
6
|
+
export const ERROR_RULE_NAME = "error";
|
|
7
|
+
export const EPSILON_RULE_NAME = "epsilon";
|
|
8
|
+
export const DOCUMENT_RULE_NAME = "document";
|
|
9
|
+
export const WILDCARD_RULE_NAME = "wildcard";
|
|
10
|
+
export const RULE_NAME_RULE_NAME = "ruleName";
|
|
11
|
+
export const DEFINITION_RULE_NAME = "definition";
|
|
12
|
+
export const PRECEDENCE_RULE_NAME = "precedence";
|
|
13
|
+
export const QUANTIFIER_RULE_NAME = "quantifier";
|
|
14
|
+
export const END_OF_LINE_RULE_NAME = "endOfLine";
|
|
15
|
+
export const PART_CHOICE_RULE_NAME = "partChoice";
|
|
16
|
+
export const DEFINITIONS_RULE_NAME = "definitions";
|
|
17
|
+
export const TERMINAL_PART_RULE_NAME = "terminalPart";
|
|
18
|
+
export const CHOICE_OF_PARTS_RULE_NAME = "choiceOfParts";
|
|
19
|
+
export const TERMINAL_SYMBOL_RULE_NAME = "terminalSymbol";
|
|
20
|
+
export const OPACITY_MODIFIER_RULE_NAME = "opacityModifier";
|
|
21
|
+
export const NON_TERMINAL_PART_RULE_NAME = "nonTerminalPart";
|
|
22
|
+
export const SEQUENCE_OF_PARTS_RULE_NAME = "sequenceOfParts";
|
|
23
|
+
export const NO_WHITESPACE_PART_RULE_NAME = "noWhitespace";
|
|
24
|
+
export const REGULAR_EXPRESSION_RULE_NAME = "regularExpression";
|
|
25
|
+
export const CALL_AHEAD_MODIFIER_RULE_NAME = "callAheadModifier";
|
|
26
|
+
export const OPTIONAL_QUANTIFIER_RULE_NAME = "optionalQuantifier";
|
|
27
|
+
export const START_OF_CONTENT_PART_RULE_NAME = "startOfContent";
|
|
28
|
+
export const SIGNIFICANT_TOKEN_TYPE_RULE_NAME = "significantTokenType";
|
|
29
|
+
export const ONE_OR_MORE_QUANTIFIER_RULE_NAME = "oneOrMoreQuantifier";
|
|
30
|
+
export const ZERO_OR_MORE_QUANTIFIER_RULE_NAME = "zeroOrMoreQuantifier";
|
package/src/state.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export default class State {
|
|
4
|
-
constructor(index, tokens, ruleMap, precedence, startOfContent) {
|
|
4
|
+
constructor(index, tokens, ruleMap, precedence, startOfContent, NonTerminalNodeMap, defaultNonTerminalNode) {
|
|
5
5
|
this.index = index;
|
|
6
6
|
this.tokens = tokens;
|
|
7
7
|
this.ruleMap = ruleMap;
|
|
8
8
|
this.precedence = precedence;
|
|
9
9
|
this.startOfContent = startOfContent;
|
|
10
|
+
this.NonTerminalNodeMap = NonTerminalNodeMap;
|
|
11
|
+
this.defaultNonTerminalNode = defaultNonTerminalNode;
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
getIndex() {
|
|
@@ -29,6 +31,14 @@ export default class State {
|
|
|
29
31
|
return this.startOfContent;
|
|
30
32
|
}
|
|
31
33
|
|
|
34
|
+
getNonTerminalNode() {
|
|
35
|
+
return this.NonTerminalNodeMap;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getDefaultNonTerminalNode() {
|
|
39
|
+
return this.defaultNonTerminalNode;
|
|
40
|
+
}
|
|
41
|
+
|
|
32
42
|
setIndex(index) {
|
|
33
43
|
this.index = index;
|
|
34
44
|
}
|
|
@@ -124,10 +134,16 @@ export default class State {
|
|
|
124
134
|
this.precedence = savedPrecedence; ///
|
|
125
135
|
}
|
|
126
136
|
|
|
127
|
-
|
|
137
|
+
NonTerminalNodeFromRuleName(ruleName) {
|
|
138
|
+
const NonTerminalNode = this.NonTerminalNodeMap[ruleName] || this.defaultNonTerminalNode;
|
|
139
|
+
|
|
140
|
+
return NonTerminalNode;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static fromTokensRuleMapStartOfContentNonTerminalNodeMapAndDefaultNonTerminalNode(tokens, ruleMap, startOfContent, NonTerminalNodeMap, defaultNonTerminalNode) {
|
|
128
144
|
const index = 0,
|
|
129
145
|
precedence = null,
|
|
130
|
-
state = new State(index, tokens, ruleMap, precedence, startOfContent);
|
|
146
|
+
state = new State(index, tokens, ruleMap, precedence, startOfContent, NonTerminalNodeMap, defaultNonTerminalNode);
|
|
131
147
|
|
|
132
148
|
return state;
|
|
133
149
|
}
|
package/src/utilities/bnf.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { RULE_NAME_RULE_NAME, QUANTIFIER_RULE_NAME, CALL_AHEAD_MODIFIER_RULE_NAME } from "../ruleNames";
|
|
6
6
|
|
|
7
7
|
const { first } = arrayUtilities;
|
|
8
8
|
|
|
@@ -31,7 +31,7 @@ export function isNodeRuleNameNode(node) {
|
|
|
31
31
|
const nonTerminalNode = node, ///
|
|
32
32
|
nonTerminalNodeRuleName = nonTerminalNode.getRuleName();
|
|
33
33
|
|
|
34
|
-
nodeRuleNameNode = (nonTerminalNodeRuleName ===
|
|
34
|
+
nodeRuleNameNode = (nonTerminalNodeRuleName === RULE_NAME_RULE_NAME);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
return nodeRuleNameNode;
|
|
@@ -45,7 +45,7 @@ export function isNodeQuantifierNode(node) {
|
|
|
45
45
|
if (nodeNonTerminalNode) {
|
|
46
46
|
const nonTerminalNode = node, ///
|
|
47
47
|
ruleName = nonTerminalNode.getRuleName(),
|
|
48
|
-
ruleNameQuantifierRuleName = (ruleName ===
|
|
48
|
+
ruleNameQuantifierRuleName = (ruleName === QUANTIFIER_RULE_NAME);
|
|
49
49
|
|
|
50
50
|
nodeQuantifierNode = ruleNameQuantifierRuleName; ///
|
|
51
51
|
}
|
|
@@ -61,7 +61,7 @@ export function isNodeCallAheadModifierNode(node) {
|
|
|
61
61
|
if (nodeNonTerminalNode) {
|
|
62
62
|
const nonTerminalNode = node, ///
|
|
63
63
|
ruleName = nonTerminalNode.getRuleName(),
|
|
64
|
-
ruleNameCallAheadModifierRuleName = (ruleName ===
|
|
64
|
+
ruleNameCallAheadModifierRuleName = (ruleName === CALL_AHEAD_MODIFIER_RULE_NAME);
|
|
65
65
|
|
|
66
66
|
nodeCallAheadModifierNode = ruleNameCallAheadModifierRuleName; ///
|
|
67
67
|
}
|