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.
Files changed (122) hide show
  1. package/example.js +9364 -8412
  2. package/lib/bnf/parser.js +4 -1
  3. package/lib/common/parser.js +17 -1
  4. package/lib/definition/choiceOfParts.js +2 -3
  5. package/lib/definition/definition.js +6 -2
  6. package/lib/definition/definitions.js +2 -2
  7. package/lib/definition/document.js +6 -2
  8. package/lib/definition/partChoice.js +6 -2
  9. package/lib/definition/partRule/nonTerminal/ruleName.js +6 -2
  10. package/lib/definition/partRule/nonTerminal.js +6 -2
  11. package/lib/definition/partRule/terminal.js +6 -2
  12. package/lib/definition/rule.js +9 -2
  13. package/lib/definition/sequenceOfParts.js +2 -2
  14. package/lib/mixins/parser.js +2 -2
  15. package/lib/node/bnf/choiceOfParts.js +2 -2
  16. package/lib/node/bnf/definition.js +7 -2
  17. package/lib/node/bnf/definitions.js +2 -2
  18. package/lib/node/bnf/document.js +2 -2
  19. package/lib/node/bnf/{part/nonTerminal.js → nonTerminalPart.js} +5 -5
  20. package/lib/node/bnf/oneOneOrMoreQuantifier.js +107 -0
  21. package/lib/node/bnf/optionalQuantifier.js +107 -0
  22. package/lib/node/bnf/part.js +4 -4
  23. package/lib/node/bnf/partChoice.js +7 -2
  24. package/lib/node/bnf/rule.js +3 -3
  25. package/lib/node/bnf/sequenceOfParts.js +2 -2
  26. package/lib/node/bnf/{part/terminal.js → terminalPart.js} +2 -2
  27. package/lib/node/bnf/zeroOneOrMoreQuantifier.js +107 -0
  28. package/lib/node/nonTerminal.js +2 -2
  29. package/lib/nonTerminalNodeMap.js +62 -0
  30. package/lib/rule/bnf/callAheadModifier.js +3 -4
  31. package/lib/rule/bnf/choiceOfParts.js +4 -5
  32. package/lib/rule/bnf/definition.js +4 -5
  33. package/lib/rule/bnf/definitions.js +4 -5
  34. package/lib/rule/bnf/document.js +4 -5
  35. package/lib/rule/bnf/endOfLine.js +3 -4
  36. package/lib/rule/bnf/epsilon.js +3 -4
  37. package/lib/rule/bnf/error.js +4 -5
  38. package/lib/rule/bnf/name.js +4 -5
  39. package/lib/rule/bnf/noWhitespacePart.js +4 -5
  40. package/lib/rule/bnf/nonTerminalPart.js +8 -4
  41. package/lib/rule/bnf/oneOrMoreQuantifier.js +3 -4
  42. package/lib/rule/bnf/opacityModifier.js +3 -4
  43. package/lib/rule/bnf/optionalQuantifier.js +3 -4
  44. package/lib/rule/bnf/part.js +3 -4
  45. package/lib/rule/bnf/partChoice.js +4 -5
  46. package/lib/rule/bnf/precedence.js +4 -5
  47. package/lib/rule/bnf/quantifier.js +10 -4
  48. package/lib/rule/bnf/regularExpression.js +3 -4
  49. package/lib/rule/bnf/rule.js +4 -5
  50. package/lib/rule/bnf/ruleName.js +3 -4
  51. package/lib/rule/bnf/sequenceOfParts.js +4 -5
  52. package/lib/rule/bnf/significantTokenType.js +4 -5
  53. package/lib/rule/bnf/startOfContentPart.js +4 -5
  54. package/lib/rule/bnf/terminalPart.js +20 -4
  55. package/lib/rule/bnf/terminalSymbol.js +3 -4
  56. package/lib/rule/bnf/wildcard.js +3 -4
  57. package/lib/rule/bnf/zeroOrMoreQuantifier.js +3 -4
  58. package/lib/rule.js +8 -22
  59. package/lib/ruleNames.js +85 -85
  60. package/lib/state.js +26 -5
  61. package/lib/utilities/bnf.js +4 -4
  62. package/package.json +1 -1
  63. package/src/bnf/parser.js +5 -0
  64. package/src/common/parser.js +5 -0
  65. package/src/definition/choiceOfParts.js +5 -7
  66. package/src/definition/definition.js +10 -3
  67. package/src/definition/definitions.js +3 -2
  68. package/src/definition/document.js +10 -3
  69. package/src/definition/partChoice.js +10 -3
  70. package/src/definition/partRule/nonTerminal/ruleName.js +10 -3
  71. package/src/definition/partRule/nonTerminal.js +10 -3
  72. package/src/definition/partRule/terminal.js +10 -3
  73. package/src/definition/rule.js +18 -7
  74. package/src/definition/sequenceOfParts.js +4 -3
  75. package/src/mixins/parser.js +2 -1
  76. package/src/node/bnf/choiceOfParts.js +4 -3
  77. package/src/node/bnf/definition.js +12 -4
  78. package/src/node/bnf/definitions.js +4 -3
  79. package/src/node/bnf/document.js +4 -3
  80. package/src/node/bnf/{part/nonTerminal.js → nonTerminalPart.js} +5 -4
  81. package/src/node/bnf/oneOneOrMoreQuantifier.js +7 -0
  82. package/src/node/bnf/optionalQuantifier.js +7 -0
  83. package/src/node/bnf/part.js +4 -4
  84. package/src/node/bnf/partChoice.js +12 -4
  85. package/src/node/bnf/rule.js +5 -4
  86. package/src/node/bnf/sequenceOfParts.js +4 -3
  87. package/src/node/bnf/{part/terminal.js → terminalPart.js} +1 -1
  88. package/src/node/bnf/zeroOneOrMoreQuantifier.js +7 -0
  89. package/src/node/nonTerminal.js +1 -1
  90. package/src/nonTerminalNodeMap.js +92 -0
  91. package/src/rule/bnf/callAheadModifier.js +3 -5
  92. package/src/rule/bnf/choiceOfParts.js +3 -5
  93. package/src/rule/bnf/definition.js +3 -5
  94. package/src/rule/bnf/definitions.js +3 -5
  95. package/src/rule/bnf/document.js +3 -5
  96. package/src/rule/bnf/endOfLine.js +3 -5
  97. package/src/rule/bnf/epsilon.js +3 -5
  98. package/src/rule/bnf/error.js +3 -5
  99. package/src/rule/bnf/name.js +3 -5
  100. package/src/rule/bnf/noWhitespacePart.js +3 -5
  101. package/src/rule/bnf/nonTerminalPart.js +13 -7
  102. package/src/rule/bnf/oneOrMoreQuantifier.js +3 -5
  103. package/src/rule/bnf/opacityModifier.js +3 -5
  104. package/src/rule/bnf/optionalQuantifier.js +3 -5
  105. package/src/rule/bnf/part.js +3 -5
  106. package/src/rule/bnf/partChoice.js +3 -5
  107. package/src/rule/bnf/precedence.js +3 -5
  108. package/src/rule/bnf/quantifier.js +16 -8
  109. package/src/rule/bnf/regularExpression.js +3 -5
  110. package/src/rule/bnf/rule.js +3 -5
  111. package/src/rule/bnf/ruleName.js +3 -5
  112. package/src/rule/bnf/sequenceOfParts.js +3 -5
  113. package/src/rule/bnf/significantTokenType.js +3 -5
  114. package/src/rule/bnf/startOfContentPart.js +3 -5
  115. package/src/rule/bnf/terminalPart.js +46 -22
  116. package/src/rule/bnf/terminalSymbol.js +3 -5
  117. package/src/rule/bnf/wildcard.js +3 -5
  118. package/src/rule/bnf/zeroOrMoreQuantifier.js +3 -5
  119. package/src/rule.js +7 -17
  120. package/src/ruleNames.js +28 -28
  121. package/src/state.js +19 -3
  122. 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 { startOfContentPartRuleName } from "../../ruleNames";
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 = startOfContentPartRuleName, ///
11
+ name = START_OF_CONTENT_PART_RULE_NAME, ///
13
12
  opacity = null,
14
13
  definitions = [
15
14
  startOfContentPartDefinition
16
15
  ],
17
- NonTerminalNode = StartOfContentPartBNFNode, ///
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
- import TerminalPartBNFNode from "../../node/bnf/part/terminal";
6
-
7
- import { epsilonRuleName,
8
- wildcardRuleName,
9
- endOfLineRuleName,
10
- terminalPartRuleName,
11
- terminalSymbolRuleName,
12
- noWhitespacePartRuleName,
13
- regularExpressionRuleName,
14
- startOfContentPartRuleName,
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
- const name = terminalPartRuleName,
20
- epsilonRuleNameDefinition = RuleNameDefinition.fromRuleName(epsilonRuleName),
21
- wildcardRuleNameDefinition = RuleNameDefinition.fromRuleName(wildcardRuleName),
22
- endOfLineRuleNameDefinition = RuleNameDefinition.fromRuleName(endOfLineRuleName),
23
- terminalSymbolRuleNameDefinition = RuleNameDefinition.fromRuleName(terminalSymbolRuleName),
24
- noWhitespacePartRuleNameDefinition = RuleNameDefinition.fromRuleName(noWhitespacePartRuleName),
25
- regularExpressionRuleNameDefinition = RuleNameDefinition.fromRuleName(regularExpressionRuleName),
26
- startOfContentPartRuleNameDefinition = RuleNameDefinition.fromRuleName(startOfContentPartRuleName),
27
- significantTokenTypeRuleNameDefinition = RuleNameDefinition.fromRuleName(significantTokenTypeRuleName),
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
- NonTerminalNode = TerminalPartBNFNode, ///
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 { terminalSymbolRuleName } from "../../ruleNames";
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 = terminalSymbolRuleName, ///
16
+ name = TERMINAL_SYMBOL_RULE_NAME, ///
18
17
  opacity = null,
19
18
  definitions = [
20
19
  stringLiteralSignificantTokenTypeDefinition
21
20
  ],
22
- NonTerminalNode = TerminalSymbolBNFNode, ///
23
- terminalSymbolRule = new TerminalSymbolBNFRule(name, opacity, definitions, NonTerminalNode);
21
+ terminalSymbolRule = new TerminalSymbolBNFRule(name, opacity, definitions);
24
22
 
25
23
  return terminalSymbolRule;
26
24
  }
@@ -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 { wildcardRuleName } from "../../ruleNames";
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 = wildcardRuleName, ///
16
+ name = WILDCARD_RULE_NAME, ///
18
17
  opacity = null,
19
18
  definitions = [
20
19
  wildcardTerminalSymbolDefinition
21
20
  ],
22
- NonTerminalNode = WildcardBNFNode, ///
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 { zeroOrMoreQuantifierRuleName } from "../../ruleNames";
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 = zeroOrMoreQuantifierRuleName, ///
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
- NonTerminalNode = QuantifierBNFNode, ///
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, NonTerminalNode) {
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
- nonTerminalNode = this.NonTerminalNode.fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity),
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 fromNameOpacityDefinitionsAndNonTerminalNode(Class, name, opacity, definitions, NonTerminalNode) {
221
- if (NonTerminalNode === undefined) {
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, NonTerminalNode);
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 nameRuleName = "name";
4
- export const partRuleName = "part";
5
- export const ruleRuleName = "rule";
6
- export const errorRuleName = "error";
7
- export const epsilonRuleName = "epsilon";
8
- export const ruleNameRuleName = "ruleName";
9
- export const documentRuleName = "document";
10
- export const wildcardRuleName = "wildcard";
11
- export const endOfLineRuleName = "endOfLine";
12
- export const definitionRuleName = "definition";
13
- export const precedenceRuleName = "precedence";
14
- export const quantifierRuleName = "quantifier";
15
- export const partChoiceRuleName = "partChoice";
16
- export const definitionsRuleName = "definitions";
17
- export const terminalPartRuleName = "terminalPart";
18
- export const choiceOfPartsRuleName = "choiceOfParts";
19
- export const terminalSymbolRuleName = "terminalSymbol";
20
- export const nonTerminalPartRuleName = "nonTerminalPart";
21
- export const sequenceOfPartsRuleName = "sequenceOfParts";
22
- export const opacityModifierRuleName = "opacityModifier";
23
- export const noWhitespacePartRuleName = "noWhitespace";
24
- export const CallAheadModifierRuleName = "callAheadModifier";
25
- export const regularExpressionRuleName = "regularExpression";
26
- export const optionalQuantifierRuleName = "optionalQuantifier";
27
- export const startOfContentPartRuleName = "startOfContent";
28
- export const oneOrMoreQuantifierRuleName = "oneOrMoreQuantifier";
29
- export const zeroOrMoreQuantifierRuleName = "zeroOrMoreQuantifier";
30
- export const significantTokenTypeRuleName = "significantTokenType";
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
- static fromTokensRuleMapAndStartOfContent(tokens, ruleMap, startOfContent) {
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
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import { ruleNameRuleName, quantifierRuleName, callAheadModifierRuleName } from "../ruleNames";
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 === ruleNameRuleName);
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 === quantifierRuleName);
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 === callAheadModifierRuleName);
64
+ ruleNameCallAheadModifierRuleName = (ruleName === CALL_AHEAD_MODIFIER_RULE_NAME);
65
65
 
66
66
  nodeCallAheadModifierNode = ruleNameCallAheadModifierRuleName; ///
67
67
  }