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.
- package/example.js +4375 -3899
- 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 +5 -5
- 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
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() {
|
package/src/common/parser.js
CHANGED
|
@@ -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 {
|
|
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
|
|
19
|
+
const ruleName = PART_CHOICE_RULE_NAME,
|
|
20
|
+
verticalBarTerminalSymbolContent = verticalBar, ///
|
|
23
21
|
openBracketTerminalSymbolContent = openBracket, ///
|
|
24
22
|
closeBracketTerminalSymbolContent = closeBracket, ///
|
|
25
|
-
partChoiceRuleNamePart = RuleNamePart.fromRuleName(
|
|
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 {
|
|
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
|
-
|
|
13
|
-
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
14
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
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,
|
package/src/definition/rule.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
16
|
+
const ruleName = PART_RULE_NAME, ///
|
|
17
|
+
openBracketTerminalSymbolContent = openBracket, ///
|
|
17
18
|
closeBracketTerminalSymbolContent = closeBracket, ///
|
|
18
|
-
partRuleNamePart = RuleNamePart.fromRuleName(
|
|
19
|
+
partRuleNamePart = RuleNamePart.fromRuleName(ruleName),
|
|
19
20
|
openBracketTerminalSymbolPart = TerminalSymbolPart.fromContent(openBracketTerminalSymbolContent),
|
|
20
21
|
closeBracketTerminalSymbolPart = TerminalSymbolPart.fromContent(closeBracketTerminalSymbolContent),
|
|
21
22
|
oneOrMorePartRuleNamePartsPart = OneOrMorePartsPart.fromPart(partRuleNamePart),
|
package/src/mixins/parser.js
CHANGED
|
@@ -10,7 +10,8 @@ function parse(tokens, rule = this.startRule, startOfContent = true) {
|
|
|
10
10
|
let node = null;
|
|
11
11
|
|
|
12
12
|
const nodes = [],
|
|
13
|
-
|
|
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 {
|
|
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
|
|
12
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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 {
|
|
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
|
|
11
|
-
|
|
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
|
|
package/src/node/bnf/document.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
import NonTerminalNode from"../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
import {
|
|
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
|
|
11
|
-
|
|
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 "
|
|
5
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import { nodeFromChildNodesAndRuleName } from "
|
|
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
|
|
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
|
+
}
|
package/src/node/bnf/part.js
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
package/src/node/bnf/rule.js
CHANGED
|
@@ -4,7 +4,7 @@ import { arrayUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import NonTerminalNode from "../../node/nonTerminal";
|
|
6
6
|
|
|
7
|
-
import {
|
|
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.
|
|
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
|
|
26
|
-
|
|
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 {
|
|
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
|
|
12
|
-
|
|
11
|
+
const ruleName = PART_RULE_NAME,
|
|
12
|
+
childNodes = this.getChildNodes(),
|
|
13
|
+
partBNFNodes = nodesFromChildNodesAndRuleName(childNodes, ruleName);
|
|
13
14
|
|
|
14
15
|
callAhead = false; ///
|
|
15
16
|
|
|
@@ -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
|
+
}
|