occam-parsers 23.0.145 → 23.0.147

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 +4375 -3899
  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 +5 -5
  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
package/src/bnf/parser.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  import bnf from "./bnf";
4
4
  import Rule from "../rule";
5
+ import NonTerminalNodeMap from "../nonTerminalNodeMap";
5
6
  import parserMixins from "../mixins/parser";
6
7
  import NameBNFRule from "../rule/bnf/name";
7
8
  import PartBNFRule from "../rule/bnf/part";
@@ -68,6 +69,10 @@ export default class BNFParser {
68
69
  return rules;
69
70
  }
70
71
 
72
+ static NonTerminalNodeMap = NonTerminalNodeMap;
73
+
74
+ static defaultNonTerminalNode = null;
75
+
71
76
  static bnf = bnf;
72
77
 
73
78
  static fromNothing() {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import parserMixins from "../mixins/parser";
4
+ import NonTerminalNode from "./../node/nonTerminal";
4
5
 
5
6
  import { rulesFromBNF, parserFromRules } from "../utilities/parser";
6
7
 
@@ -18,6 +19,10 @@ export default class CommonParser {
18
19
  return this.ruleMap;
19
20
  }
20
21
 
22
+ static NonTerminalNodeMap = {};
23
+
24
+ static defaultNonTerminalNode = NonTerminalNode;
25
+
21
26
  static fromNothing(Class) {
22
27
  const { bnf } = Class,
23
28
  rules = rulesFromBNF(bnf),
@@ -4,25 +4,23 @@ import { specialSymbols } from "occam-lexers";
4
4
 
5
5
  import Definition from "../definition";
6
6
  import RuleNamePart from "../part/nonTerminal/ruleName";
7
- import OptionalPartPart from "../part/nonTerminal/optionalPart";
8
7
  import TerminalSymbolPart from "../part/terminal/terminalSymbol";
9
8
  import OneOrMorePartsPart from "../part/nonTerminal/oneOrMoreParts";
10
9
  import SequenceOfPartsPart from "../part/nonTerminal/sequenceOfParts";
11
10
 
12
- import { partChoiceRuleName } from "../ruleNames";
11
+ import { PART_CHOICE_RULE_NAME } from "../ruleNames";
13
12
 
14
- const { verticalBar,
15
- openBracket,
16
- closeBracket } = specialSymbols;
13
+ const { verticalBar, openBracket, closeBracket } = specialSymbols;
17
14
 
18
15
  export default class ChoiceOfPartsDefinition extends Definition {
19
16
  static fromNothing() {
20
17
  let parts;
21
18
 
22
- const verticalBarTerminalSymbolContent = verticalBar, ///
19
+ const ruleName = PART_CHOICE_RULE_NAME,
20
+ verticalBarTerminalSymbolContent = verticalBar, ///
23
21
  openBracketTerminalSymbolContent = openBracket, ///
24
22
  closeBracketTerminalSymbolContent = closeBracket, ///
25
- partChoiceRuleNamePart = RuleNamePart.fromRuleName(partChoiceRuleName),
23
+ partChoiceRuleNamePart = RuleNamePart.fromRuleName(ruleName),
26
24
  verticalBarTerminalSymbolPart = TerminalSymbolPart.fromContent(verticalBarTerminalSymbolContent),
27
25
  openBracketTerminalSymbolPart = TerminalSymbolPart.fromContent(openBracketTerminalSymbolContent),
28
26
  closeBracketTerminalSymbolPart = TerminalSymbolPart.fromContent(closeBracketTerminalSymbolContent);
@@ -5,12 +5,19 @@ import RuleNamePart from "../part/nonTerminal/ruleName";
5
5
  import OptionalPartPart from "../part/nonTerminal/optionalPart";
6
6
  import OneOrMorePartsPart from "../part/nonTerminal/oneOrMoreParts";
7
7
 
8
- import { partRuleName, precedenceRuleName } from "../ruleNames";
8
+ import { PART_RULE_NAME, PRECEDENCE_RULE_NAME } from "../ruleNames";
9
9
 
10
10
  export default class DefinitionDefinition extends Definition {
11
11
  static fromNothing() {
12
- const partRuleNamePart = RuleNamePart.fromRuleName(partRuleName),
13
- precedenceRuleNamePart = RuleNamePart.fromRuleName(precedenceRuleName),
12
+ let ruleName;
13
+
14
+ ruleName = PART_RULE_NAME;
15
+
16
+ const partRuleNamePart = RuleNamePart.fromRuleName(ruleName);
17
+
18
+ ruleName = PRECEDENCE_RULE_NAME;
19
+
20
+ const precedenceRuleNamePart = RuleNamePart.fromRuleName(ruleName),
14
21
  oneOrMoreRuleNamePartsPart = OneOrMorePartsPart.fromPart(partRuleNamePart),
15
22
  optionalPrecedenceRuleNamePartPart = OptionalPartPart.fromPart(precedenceRuleNamePart),
16
23
  parts = [
@@ -8,7 +8,7 @@ import TerminalSymbolPart from "../part/terminal/terminalSymbol";
8
8
  import ZeroOrMorePartsPart from "../part/nonTerminal/zeroOrMoreParts";
9
9
  import SequenceOfPartsPart from "../part/nonTerminal/sequenceOfParts";
10
10
 
11
- import { definitionRuleName } from "../ruleNames";
11
+ import { DEFINITION_RULE_NAME } from "../ruleNames";
12
12
 
13
13
  const { verticalBar } = specialSymbols;
14
14
 
@@ -17,7 +17,8 @@ export default class DefinitionsDefinition extends Definition {
17
17
  let parts;
18
18
 
19
19
  const content = verticalBar, ///
20
- definitionRuleNamePart = RuleNamePart.fromRuleName(definitionRuleName),
20
+ ruleName = DEFINITION_RULE_NAME,
21
+ definitionRuleNamePart = RuleNamePart.fromRuleName(ruleName),
21
22
  verticalBarTerminalSymbolPart = TerminalSymbolPart.fromContent(content);
22
23
 
23
24
  parts = [
@@ -6,12 +6,19 @@ import RuleNamePart from "../part/nonTerminal/ruleName";
6
6
  import ChoiceOfPartsPart from "../part/nonTerminal/choiceOfParts";
7
7
  import OneOrMorePartsPart from "../part/nonTerminal/oneOrMoreParts";
8
8
 
9
- import { ruleRuleName, errorRuleName } from "../ruleNames";
9
+ import { RULE_RULE_NAME, ERROR_RULE_NAME } from "../ruleNames";
10
10
 
11
11
  export default class DocumentDefinition extends Definition {
12
12
  static fromNothing() {
13
- const ruleRuleNamePart = RuleNamePart.fromRuleName(ruleRuleName),
14
- errorRuleNamePart = RuleNamePart.fromRuleName(errorRuleName),
13
+ let ruleName;
14
+
15
+ ruleName = RULE_RULE_NAME;
16
+
17
+ const ruleRuleNamePart = RuleNamePart.fromRuleName(ruleName);
18
+
19
+ ruleName = ERROR_RULE_NAME;
20
+
21
+ const errorRuleNamePart = RuleNamePart.fromRuleName(ruleName),
15
22
  ruleRuleNamePartChoice = PartChoice.fromPart(ruleRuleNamePart),
16
23
  errorRuleNamePartChoice = PartChoice.fromPart(errorRuleNamePart),
17
24
  partChoices = [
@@ -4,12 +4,19 @@ import Definition from "../definition";
4
4
  import RuleNamePart from "../part/nonTerminal/ruleName";
5
5
  import OptionalPartPart from "../part/nonTerminal/optionalPart";
6
6
 
7
- import { partRuleName, precedenceRuleName } from "../ruleNames";
7
+ import { PART_RULE_NAME, PRECEDENCE_RULE_NAME } from "../ruleNames";
8
8
 
9
9
  export default class PartChoiceDefinition extends Definition {
10
10
  static fromNothing() {
11
- const partRuleNamePart = RuleNamePart.fromRuleName(partRuleName),
12
- precedenceRuleNamePart = RuleNamePart.fromRuleName(precedenceRuleName),
11
+ let ruleName;
12
+
13
+ ruleName = PART_RULE_NAME;
14
+
15
+ const partRuleNamePart = RuleNamePart.fromRuleName(ruleName);
16
+
17
+ ruleName = PRECEDENCE_RULE_NAME;
18
+
19
+ const precedenceRuleNamePart = RuleNamePart.fromRuleName(ruleName),
13
20
  optionalPrecedenceRuleNamePartPart = OptionalPartPart.fromPart(precedenceRuleNamePart),
14
21
  parts = [
15
22
  partRuleNamePart,
@@ -4,12 +4,19 @@ import Definition from "../../../definition";
4
4
  import RuleNamePart from "../../../part/nonTerminal/ruleName";
5
5
  import OptionalPartPart from "../../../part/nonTerminal/optionalPart";
6
6
 
7
- import { ruleNameRuleName, callAheadModifierRuleName } from "../../../ruleNames";
7
+ import { RULE_NAME_RULE_NAME, CALL_AHEAD_MODIFIER_RULE_NAME } from "../../../ruleNames";
8
8
 
9
9
  export default class RuleNameNonTerminalPartRuleDefinition extends Definition {
10
10
  static fromNothing() {
11
- const ruleNameRuleNamePart = RuleNamePart.fromRuleName(ruleNameRuleName),
12
- callAheadModifierRuleNamePart = RuleNamePart.fromRuleName(callAheadModifierRuleName),
11
+ let ruleName;
12
+
13
+ ruleName = RULE_NAME_RULE_NAME;
14
+
15
+ const ruleNameRuleNamePart = RuleNamePart.fromRuleName(ruleName);
16
+
17
+ ruleName = CALL_AHEAD_MODIFIER_RULE_NAME;
18
+
19
+ const callAheadModifierRuleNamePart = RuleNamePart.fromRuleName(ruleName),
13
20
  optionalCallAheadRuleNamePartPart = OptionalPartPart.fromPart(callAheadModifierRuleNamePart),
14
21
  parts = [
15
22
  ruleNameRuleNamePart,
@@ -4,12 +4,19 @@ import Definition from "../../definition";
4
4
  import RuleNamePart from "../../part/nonTerminal/ruleName";
5
5
  import ZeroOrMorePartsPart from "../../part/nonTerminal/zeroOrMoreParts";
6
6
 
7
- import { quantifierRuleName, nonTerminalPartRuleName } from "../../ruleNames";
7
+ import { QUANTIFIER_RULE_NAME, NON_TERMINAL_PART_RULE_NAME } from "../../ruleNames";
8
8
 
9
9
  export default class NonTerminalPartRuleDefinition extends Definition {
10
10
  static fromNothing() {
11
- const quantifierRuleNamePart = RuleNamePart.fromRuleName(quantifierRuleName),
12
- nonTerminalPartRuleNamePart = RuleNamePart.fromRuleName(nonTerminalPartRuleName),
11
+ let ruleName;
12
+
13
+ ruleName = QUANTIFIER_RULE_NAME;
14
+
15
+ const quantifierRuleNamePart = RuleNamePart.fromRuleName(ruleName);
16
+
17
+ ruleName = NON_TERMINAL_PART_RULE_NAME;
18
+
19
+ const nonTerminalPartRuleNamePart = RuleNamePart.fromRuleName(ruleName),
13
20
  zeroOrMoreQuantifierRuleNamePartsPart = ZeroOrMorePartsPart.fromPart(quantifierRuleNamePart),
14
21
  parts = [
15
22
  nonTerminalPartRuleNamePart,
@@ -4,12 +4,19 @@ import Definition from "../../definition";
4
4
  import RuleNamePart from "../../part/nonTerminal/ruleName";
5
5
  import ZeroOrMorePartsPart from "../../part/nonTerminal/zeroOrMoreParts";
6
6
 
7
- import { quantifierRuleName, terminalPartRuleName } from "../../ruleNames";
7
+ import { QUANTIFIER_RULE_NAME, TERMINAL_PART_RULE_NAME } from "../../ruleNames";
8
8
 
9
9
  export default class TerminalPartRuleDefinition extends Definition {
10
10
  static fromNothing() {
11
- const quantifierRuleNamePart = RuleNamePart.fromRuleName(quantifierRuleName),
12
- terminalPartRuleNamePart = RuleNamePart.fromRuleName(terminalPartRuleName),
11
+ let ruleName;
12
+
13
+ ruleName = QUANTIFIER_RULE_NAME;
14
+
15
+ const quantifierRuleNamePart = RuleNamePart.fromRuleName(ruleName);
16
+
17
+ ruleName = TERMINAL_PART_RULE_NAME;
18
+
19
+ const terminalPartRuleNamePart = RuleNamePart.fromRuleName(ruleName),
13
20
  zeroOrMoreQuantifierRuleNamePartsPart = ZeroOrMorePartsPart.fromPart(quantifierRuleNamePart),
14
21
  parts = [
15
22
  terminalPartRuleNamePart,
@@ -7,19 +7,30 @@ import RuleNamePart from "../part/nonTerminal/ruleName";
7
7
  import OptionalPartPart from "../part/nonTerminal/optionalPart";
8
8
  import TerminalSymbolPart from "../part/terminal/terminalSymbol";
9
9
 
10
- import { nameRuleName, definitionsRuleName, opacityModifierRuleName } from "../ruleNames";
10
+ import { NAME_RULE_NAME, DEFINITIONS_RULE_NAME, OPACITY_MODIFIER_RULE_NAME } from "../ruleNames";
11
11
 
12
12
  const { separator, terminator } = specialSymbols;
13
13
 
14
14
  export default class RuleDefinition extends Definition {
15
15
  static fromNothing() {
16
- const separatorTerminalSymbolContent = separator,
17
- terminatorTerminalSymbolContent = terminator,
18
- opacityModifierRuleNamePart = RuleNamePart.fromRuleName(opacityModifierRuleName),
19
- nameRuleNamePart = RuleNamePart.fromRuleName(nameRuleName),
16
+ let ruleName;
17
+
18
+ const separatorTerminalSymbolContent = separator, ///
19
+ terminatorTerminalSymbolContent = terminator; ///
20
+
21
+ ruleName = OPACITY_MODIFIER_RULE_NAME;
22
+
23
+ const opacityModifierRuleNamePart = RuleNamePart.fromRuleName(ruleName);
24
+
25
+ ruleName = NAME_RULE_NAME;
26
+
27
+ const nameRuleNamePart = RuleNamePart.fromRuleName(ruleName),
20
28
  optionalOpacityRuleNamePartPart = OptionalPartPart.fromPart(opacityModifierRuleNamePart),
21
- separatorTerminalSymbolPart = TerminalSymbolPart.fromContent(separatorTerminalSymbolContent),
22
- definitionsRuleNamePart = RuleNamePart.fromRuleName(definitionsRuleName),
29
+ separatorTerminalSymbolPart = TerminalSymbolPart.fromContent(separatorTerminalSymbolContent);
30
+
31
+ ruleName = DEFINITIONS_RULE_NAME;
32
+
33
+ const definitionsRuleNamePart = RuleNamePart.fromRuleName(ruleName),
23
34
  terminatorTerminalSymbolPart = TerminalSymbolPart.fromContent(terminatorTerminalSymbolContent),
24
35
  parts = [
25
36
  nameRuleNamePart,
@@ -7,15 +7,16 @@ import RuleNamePart from "../part/nonTerminal/ruleName";
7
7
  import TerminalSymbolPart from "../part/terminal/terminalSymbol";
8
8
  import OneOrMorePartsPart from "../part/nonTerminal/oneOrMoreParts";
9
9
 
10
- import { partRuleName } from "../ruleNames";
10
+ import { PART_RULE_NAME } from "../ruleNames";
11
11
 
12
12
  const { openBracket, closeBracket } = specialSymbols;
13
13
 
14
14
  export default class SequenceOfPartsDefinition extends Definition {
15
15
  static fromNothing() {
16
- const openBracketTerminalSymbolContent = openBracket, ///
16
+ const ruleName = PART_RULE_NAME, ///
17
+ openBracketTerminalSymbolContent = openBracket, ///
17
18
  closeBracketTerminalSymbolContent = closeBracket, ///
18
- partRuleNamePart = RuleNamePart.fromRuleName(partRuleName),
19
+ partRuleNamePart = RuleNamePart.fromRuleName(ruleName),
19
20
  openBracketTerminalSymbolPart = TerminalSymbolPart.fromContent(openBracketTerminalSymbolContent),
20
21
  closeBracketTerminalSymbolPart = TerminalSymbolPart.fromContent(closeBracketTerminalSymbolContent),
21
22
  oneOrMorePartRuleNamePartsPart = OneOrMorePartsPart.fromPart(partRuleNamePart),
@@ -10,7 +10,8 @@ function parse(tokens, rule = this.startRule, startOfContent = true) {
10
10
  let node = null;
11
11
 
12
12
  const nodes = [],
13
- state = State.fromTokensRuleMapAndStartOfContent(tokens, this.ruleMap, startOfContent),
13
+ { NonTerminalNodeMap, defaultNonTerminalNode } = this.constructor,
14
+ state = State.fromTokensRuleMapStartOfContentNonTerminalNodeMapAndDefaultNonTerminalNode(tokens, this.ruleMap, startOfContent, NonTerminalNodeMap, defaultNonTerminalNode),
14
15
  callback = null,
15
16
  callAhead = null,
16
17
  parsed = rule.parse(nodes, state, callback, callAhead);
@@ -3,13 +3,14 @@
3
3
  import NonTerminalNode from "../../node/nonTerminal";
4
4
  import ChoiceOfPartsPart from "../../part/nonTerminal/choiceOfParts";
5
5
 
6
- import { partChoiceRuleName } from "../../ruleNames";
6
+ import { PART_CHOICE_RULE_NAME } from "../../ruleNames";
7
7
  import { nodesFromChildNodesAndRuleName } from "../../utilities/node";
8
8
 
9
9
  export default class ChoiceOfPartsBNFNode extends NonTerminalNode {
10
10
  generatePart(callAhead) {
11
- const childNodes = this.getChildNodes(),
12
- partChoiceBNFNodes = nodesFromChildNodesAndRuleName(childNodes, partChoiceRuleName);
11
+ const ruleName = PART_CHOICE_RULE_NAME,
12
+ childNodes = this.getChildNodes(),
13
+ partChoiceBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleName);
13
14
 
14
15
  callAhead = false; ///
15
16
 
@@ -3,14 +3,22 @@
3
3
  import Definition from "../../definition";
4
4
  import NonTerminalNode from "../../node/nonTerminal";
5
5
 
6
- import { partRuleName, precedenceRuleName } from "../../ruleNames";
6
+ import { PART_RULE_NAME, PRECEDENCE_RULE_NAME } from "../../ruleNames";
7
7
  import { nodeFromChildNodesAndRuleName, nodesFromChildNodesAndRuleName } from "../../utilities/node";
8
8
 
9
9
  export default class DefinitionBNFNode extends NonTerminalNode {
10
10
  generateDefinition() {
11
- const childNodes = this.getChildNodes(),
12
- partBNFNodes = nodesFromChildNodesAndRuleName(childNodes, partRuleName),
13
- precedenceBNFNode = nodeFromChildNodesAndRuleName(childNodes, precedenceRuleName),
11
+ let ruleName;
12
+
13
+ const childNodes = this.getChildNodes();
14
+
15
+ ruleName = PART_RULE_NAME;
16
+
17
+ const partBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleName);
18
+
19
+ ruleName = PRECEDENCE_RULE_NAME;
20
+
21
+ const precedenceBNFNode = nodeFromChildNodesAndRuleName(childNodes, ruleName),
14
22
  callAhead = false, ///
15
23
  parts = partBNFNodes.map((partBNFNode) => {
16
24
  const part = partBNFNode.generatePart(callAhead);
@@ -2,13 +2,14 @@
2
2
 
3
3
  import NonTerminalNode from "../../node/nonTerminal";
4
4
 
5
- import { definitionRuleName } from "../../ruleNames";
5
+ import { DEFINITION_RULE_NAME } from "../../ruleNames";
6
6
  import { nodesFromChildNodesAndRuleName } from "../../utilities/node";
7
7
 
8
8
  export default class DefinitionsBNFNode extends NonTerminalNode {
9
9
  generateDefinitions() {
10
- const childNodes = this.getChildNodes(),
11
- definitionBNFNodes = nodesFromChildNodesAndRuleName(childNodes, definitionRuleName),
10
+ const ruleName = DEFINITION_RULE_NAME,
11
+ childNodes = this.getChildNodes(),
12
+ definitionBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleName),
12
13
  definitions = definitionBNFNodes.map((definitionBNFNode) => {
13
14
  const definition = definitionBNFNode.generateDefinition();
14
15
 
@@ -2,13 +2,14 @@
2
2
 
3
3
  import NonTerminalNode from"../../node/nonTerminal";
4
4
 
5
- import { ruleRuleName } from "../../ruleNames";
5
+ import { RULE_RULE_NAME } from "../../ruleNames";
6
6
  import { nodesFromChildNodesAndRuleName } from "../../utilities/node";
7
7
 
8
8
  export default class DocumentBNFNode extends NonTerminalNode {
9
9
  generateRules(Rule) {
10
- const childNodes = this.getChildNodes(),
11
- ruleBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleRuleName),
10
+ const ruleName = RULE_RULE_NAME,
11
+ childNodes = this.getChildNodes(),
12
+ ruleBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleName),
12
13
  rules = ruleBNFNodes.map((ruleBNFNode) => {
13
14
  const rule = ruleBNFNode.generateRule(Rule);
14
15
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import NonTerminalNode from "../../../node/nonTerminal";
5
+ import NonTerminalNode from "../../node/nonTerminal";
6
6
 
7
- import { callAheadModifierRuleName } from "../../../ruleNames";
8
- import { nodeFromChildNodesAndRuleName } from "../../../utilities/node";
7
+ import { CALL_AHEAD_MODIFIER_RULE_NAME } from "../../ruleNames";
8
+ import { nodeFromChildNodesAndRuleName } from "../../utilities/node";
9
9
 
10
10
  const { first } = arrayUtilities;
11
11
 
@@ -14,7 +14,8 @@ export default class NonTerminalPartBNFNode extends NonTerminalNode {
14
14
  const childNodes = this.getChildNodes();
15
15
 
16
16
  if (!callAhead) {
17
- const callAheadModifierBNFNode = nodeFromChildNodesAndRuleName(childNodes, callAheadModifierRuleName);
17
+ const ruleName = CALL_AHEAD_MODIFIER_RULE_NAME,
18
+ callAheadModifierBNFNode = nodeFromChildNodesAndRuleName(childNodes, ruleName);
18
19
 
19
20
  callAhead = (callAheadModifierBNFNode !== null);
20
21
  }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
+
5
+ export default class OneOrMoreQuantifierBNFNode extends NonTerminalNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return NonTerminalNode.fromRuleNameChildNodesAndOpacity(OneOrMoreQuantifierBNFNode, ruleName, childNodes, opacity); }
7
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
+
5
+ export default class OptionalQuantifierBNFNode extends NonTerminalNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return NonTerminalNode.fromRuleNameChildNodesAndOpacity(OptionalQuantifierBNFNode, ruleName, childNodes, opacity); }
7
+ }
@@ -8,7 +8,7 @@ import OneOrMorePartsPart from "../../part/nonTerminal/oneOrMoreParts";
8
8
  import ZeroOrMorePartsPart from "../../part/nonTerminal/zeroOrMoreParts";
9
9
 
10
10
  import { isNodeQuantifierNode, ruleNameFromQuantifierNode } from "../../utilities/bnf";
11
- import { optionalQuantifierRuleName, oneOrMoreQuantifierRuleName, zeroOrMoreQuantifierRuleName } from "../../ruleNames";
11
+ import { OPTIONAL_QUANTIFIER_RULE_NAME, ONE_OR_MORE_QUANTIFIER_RULE_NAME, ZERO_OR_MORE_QUANTIFIER_RULE_NAME } from "../../ruleNames";
12
12
 
13
13
  const { last } = arrayUtilities;
14
14
 
@@ -68,19 +68,19 @@ function collectionOfPartsPartFromPartAndRuleName(part, ruleName) {
68
68
  let collectionOfPartsPart;
69
69
 
70
70
  switch (ruleName) {
71
- case optionalQuantifierRuleName :
71
+ case OPTIONAL_QUANTIFIER_RULE_NAME :
72
72
  const optionalPartPart = OptionalPartPart.fromPart(part);
73
73
 
74
74
  collectionOfPartsPart = optionalPartPart; ///
75
75
  break;
76
76
 
77
- case oneOrMoreQuantifierRuleName :
77
+ case ONE_OR_MORE_QUANTIFIER_RULE_NAME :
78
78
  const oneOrMorePartsPart = OneOrMorePartsPart.fromPart(part);
79
79
 
80
80
  collectionOfPartsPart = oneOrMorePartsPart; ///
81
81
  break;
82
82
 
83
- case zeroOrMoreQuantifierRuleName :
83
+ case ZERO_OR_MORE_QUANTIFIER_RULE_NAME :
84
84
  const zeroOrMorePartsPart = ZeroOrMorePartsPart.fromPart(part);
85
85
 
86
86
  collectionOfPartsPart = zeroOrMorePartsPart; ///
@@ -4,13 +4,21 @@ import PartChoice from "../../partChoice";
4
4
  import NonTerminalNode from "../../node/nonTerminal";
5
5
 
6
6
  import { nodeFromChildNodesAndRuleName } from "../../utilities/node";
7
- import { partRuleName, precedenceRuleName } from "../../ruleNames";
7
+ import { PART_RULE_NAME, PRECEDENCE_RULE_NAME } from "../../ruleNames";
8
8
 
9
9
  export default class PartChoiceBNFNode extends NonTerminalNode {
10
10
  generatePartChoice(callAhead) {
11
- const childNodes = this.getChildNodes(),
12
- partBNFNode = nodeFromChildNodesAndRuleName(childNodes, partRuleName),
13
- precedenceBNFNode = nodeFromChildNodesAndRuleName(childNodes, precedenceRuleName);
11
+ let ruleName;
12
+
13
+ const childNodes = this.getChildNodes();
14
+
15
+ ruleName = PART_RULE_NAME;
16
+
17
+ const partBNFNode = nodeFromChildNodesAndRuleName(childNodes, ruleName);
18
+
19
+ ruleName = PRECEDENCE_RULE_NAME;
20
+
21
+ const precedenceBNFNode = nodeFromChildNodesAndRuleName(childNodes, ruleName);
14
22
 
15
23
  callAhead = false; ///
16
24
 
@@ -4,7 +4,7 @@ import { arrayUtilities } from "necessary";
4
4
 
5
5
  import NonTerminalNode from "../../node/nonTerminal";
6
6
 
7
- import { opacityModifierRuleName } from "../../ruleNames";
7
+ import { OPACITY_MODIFIER_RULE_NAME } from "../../ruleNames";
8
8
  import { nodeFromChildNodesAndRuleName } from "../../utilities/node";
9
9
 
10
10
  const { first, secondLast } = arrayUtilities;
@@ -14,7 +14,7 @@ export default class RuleBNFNode extends NonTerminalNode {
14
14
  const name = this.getName(),
15
15
  opacity = this.getOpacity(),
16
16
  definitions = this.generateDefinitions(),
17
- rule = Rule.fromNameOpacityDefinitionsAndNonTerminalNode(name, opacity, definitions, NonTerminalNode);
17
+ rule = Rule.fromNameOpacityAndDefinitions(name, opacity, definitions);
18
18
 
19
19
  return rule;
20
20
  }
@@ -22,8 +22,9 @@ export default class RuleBNFNode extends NonTerminalNode {
22
22
  getOpacity() {
23
23
  let opacity = null;
24
24
 
25
- const childNodes = this.getChildNodes(),
26
- opacityModifierBNFNode = nodeFromChildNodesAndRuleName(childNodes, opacityModifierRuleName);
25
+ const ruleName = OPACITY_MODIFIER_RULE_NAME,
26
+ childNodes = this.getChildNodes(),
27
+ opacityModifierBNFNode = nodeFromChildNodesAndRuleName(childNodes, ruleName);
27
28
 
28
29
  if (opacityModifierBNFNode !== null) {
29
30
  opacity = opacityModifierBNFNode.getOpacity();
@@ -3,13 +3,14 @@
3
3
  import NonTerminalNode from "../../node/nonTerminal";
4
4
  import SequenceOfPartsPart from "../../part/nonTerminal/sequenceOfParts";
5
5
 
6
- import { partRuleName } from "../../ruleNames";
6
+ import { PART_RULE_NAME } from "../../ruleNames";
7
7
  import { nodesFromChildNodesAndRuleName } from "../../utilities/node";
8
8
 
9
9
  export default class SequenceOfPartsBNFNode extends NonTerminalNode {
10
10
  generatePart(callAhead) {
11
- const childNodes = this.getChildNodes(),
12
- partBNFNodes = nodesFromChildNodesAndRuleName(childNodes, partRuleName);
11
+ const ruleName = PART_RULE_NAME,
12
+ childNodes = this.getChildNodes(),
13
+ partBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleName);
13
14
 
14
15
  callAhead = false; ///
15
16
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import NonTerminalNode from "../../../node/nonTerminal";
5
+ import NonTerminalNode from "../../node/nonTerminal";
6
6
 
7
7
  const { first } = arrayUtilities;
8
8
 
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ import NonTerminalNode from "../../node/nonTerminal";
4
+
5
+ export default class ZerorOrMoreQuantifierBNFNode extends NonTerminalNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return NonTerminalNode.fromRuleNameChildNodesAndOpacity(ZerorOrMoreQuantifierBNFNode, ruleName, childNodes, opacity); }
7
+ }
@@ -239,7 +239,7 @@ export default class NonTerminalNode {
239
239
  return matches;
240
240
  }
241
241
 
242
- rewrite() {
242
+ rewrite(state) {
243
243
  const rewrittenNonTerminalNode = null;
244
244
 
245
245
  return rewrittenNonTerminalNode;