wikipeg 6.0.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HISTORY.md +13 -0
- package/README.md +37 -1
- package/VERSION +1 -1
- package/lib/compiler/language/php.js +2 -2
- package/lib/compiler/passes/analyze-params.js +19 -3
- package/lib/compiler/passes/ast-to-code.js +44 -4
- package/lib/compiler/passes/mark-pure.js +29 -0
- package/lib/compiler/passes/report-unknown-attributes.js +1 -0
- package/lib/compiler.js +1 -0
- package/lib/parser.js +225 -86
- package/lib/peg.js +1 -1
- package/package.json +1 -1
package/HISTORY.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
+
## 6.1.0 (2026-02-13)
|
|
4
|
+
* Add 'labeled expression parameter' which allows parameterizing a rule
|
|
5
|
+
by the (string) value of a labeled expression. This is particularly
|
|
6
|
+
useful for parsing matched syntax elements, like XML tags.
|
|
7
|
+
* Add the ability to assert that a parameter has a specific value.
|
|
8
|
+
Previously assertions were limited to truthy/falsey.
|
|
9
|
+
* Add `optimizePureActions` option to the PEG compiler which enables an
|
|
10
|
+
optimization to skip execution of rule action blocks whose values
|
|
11
|
+
are never used. A new `[pure]` rule attribute can enable or disable
|
|
12
|
+
this optimization on an individual rule. For example,
|
|
13
|
+
`[pure=false]` ensures execution of that rule's action block(s) on a
|
|
14
|
+
successful match, even if the rule result is discarded.
|
|
15
|
+
|
|
3
16
|
## 6.0.0 (2025-08-14)
|
|
4
17
|
* Bump minimum required PHP version to 8.1
|
|
5
18
|
* Zero-or-more or one-or-more repetitions of character classes are now
|
package/README.md
CHANGED
|
@@ -128,6 +128,11 @@ object to `PEG.buildParser`. The following options are supported:
|
|
|
128
128
|
determine that a rule can not match. This can affect failure
|
|
129
129
|
reporting, since we might be able to fail on a parent rule before
|
|
130
130
|
actually recursing into the child responsible.
|
|
131
|
+
* `optimizePureActions` = if `true`, defaults to enabling a rule
|
|
132
|
+
optimization which skips executing rule action blocks if the
|
|
133
|
+
result of that rule will not be used. This can be enabled or
|
|
134
|
+
disabled for individual rules via the `[pure]` rule attribute
|
|
135
|
+
described below.
|
|
131
136
|
* `cacheInitHook` and `cacheRuleHook` — functions to generate custom cache
|
|
132
137
|
control code
|
|
133
138
|
* `allowedStartRules` — rules the parser will be allowed to start parsing from
|
|
@@ -561,6 +566,19 @@ Marks a rule as unreachable. If the `allowUselessChoice` option is
|
|
|
561
566
|
false, this attribute permits a reference to the rule in a choice even
|
|
562
567
|
if a previous option in the choice appears to always match.
|
|
563
568
|
|
|
569
|
+
#### [pure]
|
|
570
|
+
|
|
571
|
+
Marks a rule as not having side effects in its action blocks. This
|
|
572
|
+
allows action blocks in rules which have this attribute set to be
|
|
573
|
+
skipped (not executed) when the value of the rule is not needed.
|
|
574
|
+
|
|
575
|
+
#### [pure=false]
|
|
576
|
+
|
|
577
|
+
Marks a rule as having side effects in its action blocks. If the
|
|
578
|
+
`optimizePureActions` option is given to the parser, this ensures that
|
|
579
|
+
the action blocks for this rule are executed even if the value of
|
|
580
|
+
the rule is not needed.
|
|
581
|
+
|
|
564
582
|
Rule parameter syntax
|
|
565
583
|
---------------------
|
|
566
584
|
|
|
@@ -571,11 +589,12 @@ All parameters referenced in the grammar have an initial value and can
|
|
|
571
589
|
be used before their first assignment.
|
|
572
590
|
|
|
573
591
|
Parameters have a type detected at compile time: boolean, integer,
|
|
574
|
-
string or
|
|
592
|
+
string, reference, or labeled expression. Initial values for each type are:
|
|
575
593
|
- boolean: false
|
|
576
594
|
- integer: 0
|
|
577
595
|
- string: ""
|
|
578
596
|
- reference: null
|
|
597
|
+
- labeled expression: null (or the integer or string default value)
|
|
579
598
|
|
|
580
599
|
The parameter namespace is global, but the value of a parameter reverts
|
|
581
600
|
to its previous value after termination of the assigning rule reference.
|
|
@@ -590,6 +609,15 @@ Assert that the parameter "x" is true or nonzero
|
|
|
590
609
|
|
|
591
610
|
Assert that the parameter "x" is false or zero
|
|
592
611
|
|
|
612
|
+
#### & < *parameter* == *value* >
|
|
613
|
+
|
|
614
|
+
Assert that the parameter "x" has the specified value.
|
|
615
|
+
|
|
616
|
+
#### ! < *parameter* == *value* >
|
|
617
|
+
#### & < *parameter* != *value* >
|
|
618
|
+
|
|
619
|
+
Assert that the parameter "x" does not have the specified value.
|
|
620
|
+
|
|
593
621
|
#### *rule* < *parameter* = true >
|
|
594
622
|
|
|
595
623
|
Match a parsing expression of a rule recursively, and assign *parameter* to
|
|
@@ -615,6 +643,14 @@ Assign x = x + 1.
|
|
|
615
643
|
|
|
616
644
|
String assignment.
|
|
617
645
|
|
|
646
|
+
#### *rule* < *parameter* = $*label* >
|
|
647
|
+
|
|
648
|
+
Assign the value of the given labeled expression to the parameter.
|
|
649
|
+
|
|
650
|
+
Labeled expression parameters can't be intermixed with boolean
|
|
651
|
+
assignments to the same parameter, but they can co-exist with
|
|
652
|
+
integer or string assignments to the parameter.
|
|
653
|
+
|
|
618
654
|
#### *rule* < & *parameter* = 1 >
|
|
619
655
|
|
|
620
656
|
Create a reference (in/out) parameter and give it an initial value of 1.
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
6.
|
|
1
|
+
6.1.0
|
|
@@ -43,8 +43,8 @@ let php = {
|
|
|
43
43
|
maxFailPos: '$this->maxFailPos',
|
|
44
44
|
assertionSuccess: 'false',
|
|
45
45
|
inputLength: '$this->inputLength',
|
|
46
|
-
advanceInputChar: 'self::advanceChar($this->input, $this->currPos)
|
|
47
|
-
consumeInputChar: 'self::consumeChar($this->input, $this->currPos)
|
|
46
|
+
advanceInputChar: 'self::advanceChar($this->input, $this->currPos)',
|
|
47
|
+
consumeInputChar: 'self::consumeChar($this->input, $this->currPos)',
|
|
48
48
|
result: '$result',
|
|
49
49
|
actionArgPrefix: '$',
|
|
50
50
|
|
|
@@ -12,8 +12,14 @@ function analyzeParams(ast, options) {
|
|
|
12
12
|
|
|
13
13
|
function registerParamType(name, type, location) {
|
|
14
14
|
var paramInfo = getParamInfo(name);
|
|
15
|
-
if (
|
|
16
|
-
|
|
15
|
+
if (
|
|
16
|
+
(paramInfo.type === 'labeled' && type === 'boolean') ||
|
|
17
|
+
(paramInfo.type === 'boolean' && type === 'labeled')
|
|
18
|
+
){
|
|
19
|
+
throw new GrammarError("Labeled expression parameters can't also be boolean: " + name, location);
|
|
20
|
+
}
|
|
21
|
+
if (paramInfo.type !== undefined && paramInfo.type !== 'labeled') {
|
|
22
|
+
if (paramInfo.type !== type && type !== 'labeled') {
|
|
17
23
|
throw new GrammarError("Type conflict in parameter " + name, location);
|
|
18
24
|
}
|
|
19
25
|
} else {
|
|
@@ -133,7 +139,17 @@ function analyzeParams(ast, options) {
|
|
|
133
139
|
(new Traverser(ast, refScopeHandlers))
|
|
134
140
|
.traverse(targetNode, assignment.name, refScope);
|
|
135
141
|
}
|
|
136
|
-
}
|
|
142
|
+
},
|
|
143
|
+
parameter_and: function(node) {
|
|
144
|
+
if (node.assert) {
|
|
145
|
+
registerParamType(node.parameter, node.assert.type, node.location);
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
parameter_not: function(node) {
|
|
149
|
+
if (node.assert) {
|
|
150
|
+
registerParamType(node.parameter, node.assert.type, node.location);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
137
153
|
})(ast);
|
|
138
154
|
|
|
139
155
|
// For every reference parameter, traverse the call graph of each start rule,
|
|
@@ -6,7 +6,8 @@ var js = require("../language/javascript"),
|
|
|
6
6
|
objects = require('../../utils/objects'),
|
|
7
7
|
classNode = require("../charsets").classNode,
|
|
8
8
|
asts = require("../asts"),
|
|
9
|
-
fs = require("fs")
|
|
9
|
+
fs = require("fs"),
|
|
10
|
+
GrammarError = require("../../grammar-error");
|
|
10
11
|
|
|
11
12
|
function generateJavascript(ast, options) {
|
|
12
13
|
/**
|
|
@@ -682,6 +683,8 @@ function generateJavascript(ast, options) {
|
|
|
682
683
|
} else {
|
|
683
684
|
return 'null';
|
|
684
685
|
}
|
|
686
|
+
} else if (type === 'labeled') {
|
|
687
|
+
return 'null';
|
|
685
688
|
} else {
|
|
686
689
|
throw new Error('Unknown param type: ' + type);
|
|
687
690
|
}
|
|
@@ -761,9 +764,31 @@ function generateJavascript(ast, options) {
|
|
|
761
764
|
var negate = node.type === 'parameter_not';
|
|
762
765
|
var reg = context.getResultReg(result);
|
|
763
766
|
var paramExpression = makeParamExpression(node.paramInfo);
|
|
767
|
+
if (node.assert) {
|
|
768
|
+
if (node.assert.type === 'boolean') {
|
|
769
|
+
if (node.assert.value === false) {
|
|
770
|
+
negate = !negate;
|
|
771
|
+
}
|
|
772
|
+
if (!negate) {
|
|
773
|
+
paramExpression = language.toBool(paramExpression);
|
|
774
|
+
}
|
|
775
|
+
} else if (node.assert.type === 'string') {
|
|
776
|
+
paramExpression = `${paramExpression} === ${js.stringify(node.assert.value)}`;
|
|
777
|
+
} else if (node.assert.type === 'labeled') {
|
|
778
|
+
if (context.env[node.assert.value] === undefined) {
|
|
779
|
+
throw new GrammarError(
|
|
780
|
+
'Unknown label "' + node.assert.value + '" for labeled-expression assertion',
|
|
781
|
+
node.location
|
|
782
|
+
);
|
|
783
|
+
}
|
|
784
|
+
paramExpression = `${paramExpression} === ${context.env[node.assert.value]}`;
|
|
785
|
+
} else {
|
|
786
|
+
paramExpression = `${paramExpression} === ${node.assert.value}`;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
764
789
|
if (negate) {
|
|
765
790
|
result.condition = `!(${paramExpression})`;
|
|
766
|
-
} else if (
|
|
791
|
+
} else if (node.assert || node.paramInfo.type === 'boolean') {
|
|
767
792
|
result.condition = paramExpression;
|
|
768
793
|
} else {
|
|
769
794
|
result.condition = language.toBool(paramExpression);
|
|
@@ -1074,6 +1099,13 @@ function generateJavascript(ast, options) {
|
|
|
1074
1099
|
let assignment = node.assignments[i];
|
|
1075
1100
|
let newValue;
|
|
1076
1101
|
|
|
1102
|
+
if (assignment.type === 'labeled' &&
|
|
1103
|
+
context.env[assignment.value] === undefined) {
|
|
1104
|
+
throw new GrammarError(
|
|
1105
|
+
'Unknown label "' + assignment.value + '" for labeled-expression parameter',
|
|
1106
|
+
node.location
|
|
1107
|
+
);
|
|
1108
|
+
}
|
|
1077
1109
|
if (assignment.isref) {
|
|
1078
1110
|
if (assignment.type === 'increment') {
|
|
1079
1111
|
newValue = `${language.refParamValue(assignment.name)} + ${assignment.value}`;
|
|
@@ -1081,6 +1113,8 @@ function generateJavascript(ast, options) {
|
|
|
1081
1113
|
newValue = assignment.value ? 'true' : 'false';
|
|
1082
1114
|
} else if (assignment.type === 'string') {
|
|
1083
1115
|
newValue = js.stringify(assignment.value);
|
|
1116
|
+
} else if (assignment.type === 'labeled') {
|
|
1117
|
+
newValue = context.env[assignment.value];
|
|
1084
1118
|
} else {
|
|
1085
1119
|
newValue = assignment.value;
|
|
1086
1120
|
}
|
|
@@ -1097,6 +1131,8 @@ function generateJavascript(ast, options) {
|
|
|
1097
1131
|
newValue = `${language.paramArgName(assignment.name)} + ${assignment.value}`;
|
|
1098
1132
|
} else if (assignment.type === 'string') {
|
|
1099
1133
|
newValue = js.stringify(assignment.value);
|
|
1134
|
+
} else if (assignment.type === 'labeled') {
|
|
1135
|
+
newValue = context.env[assignment.value];
|
|
1100
1136
|
} else {
|
|
1101
1137
|
newValue = assignment.value;
|
|
1102
1138
|
}
|
|
@@ -1190,14 +1226,18 @@ function generateJavascript(ast, options) {
|
|
|
1190
1226
|
result.block = [`${savedPos} = ${language.currPos};`];
|
|
1191
1227
|
}
|
|
1192
1228
|
var subresult = recurse(node.expression, newContext);
|
|
1193
|
-
var
|
|
1229
|
+
var canSkipAction = context.getDiscard() && node.pure;
|
|
1230
|
+
var funcId = canSkipAction ? null :
|
|
1231
|
+
makeActionFunc(node.code, newContext);
|
|
1194
1232
|
result.append(subresult);
|
|
1195
1233
|
if (node.alwaysMatch) {
|
|
1196
1234
|
result.condition = 'true';
|
|
1197
1235
|
}
|
|
1198
1236
|
result.onSuccess([
|
|
1199
1237
|
`${language.savedPos} = ${savedPos};`,
|
|
1200
|
-
|
|
1238
|
+
canSkipAction ?
|
|
1239
|
+
`${reg} = true;` :
|
|
1240
|
+
`${reg} = ${makeActionCall(funcId, newContext)};`,
|
|
1201
1241
|
]);
|
|
1202
1242
|
freeReg(freePos, result);
|
|
1203
1243
|
return result;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var visitor = require("../visitor"),
|
|
4
|
+
asts = require("../asts");
|
|
5
|
+
|
|
6
|
+
// Propagate `pure` attribute to `action` nodes
|
|
7
|
+
|
|
8
|
+
function markPure(ast, options) {
|
|
9
|
+
options = options || {};
|
|
10
|
+
var pureDefault = false;
|
|
11
|
+
if (options.optimizePureActions) {
|
|
12
|
+
pureDefault = true;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const propagatePure = visitor.build({
|
|
16
|
+
rule: function(rule) {
|
|
17
|
+
var pure = asts.getRuleAttributeValue(
|
|
18
|
+
rule, 'pure', pureDefault
|
|
19
|
+
);
|
|
20
|
+
propagatePure(rule.expression, { pure });
|
|
21
|
+
},
|
|
22
|
+
action: function(node, result) {
|
|
23
|
+
node.pure = result.pure;
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
propagatePure(ast);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = markPure;
|
package/lib/compiler.js
CHANGED
|
@@ -20,6 +20,7 @@ var compiler = {
|
|
|
20
20
|
},
|
|
21
21
|
transform: {
|
|
22
22
|
removeProxyRules: require("./compiler/passes/remove-proxy-rules"),
|
|
23
|
+
markPure: require("./compiler/passes/mark-pure"),
|
|
23
24
|
inlineSimpleRules: require("./compiler/passes/inline-simple-rules"),
|
|
24
25
|
optimizeCharacterClass:
|
|
25
26
|
require("./compiler/passes/optimize-character-class"),
|
package/lib/parser.js
CHANGED
|
@@ -377,20 +377,23 @@ function peg$parse(input, options = {}) {
|
|
|
377
377
|
var peg$c7 = {"type":"literal","value":"]","description":"\"]\""};
|
|
378
378
|
var peg$c8 = {"type":"literal","value":"/","description":"\"/\""};
|
|
379
379
|
var peg$c9 = {"type":"class","value":"[0-9]","description":"[0-9]"};
|
|
380
|
-
var peg$c10 = {"type":"literal","value":"
|
|
381
|
-
var peg$c11 = {"type":"literal","value":"
|
|
382
|
-
var peg$c12 = {"type":"literal","value":"
|
|
383
|
-
var peg$c13 = {"type":"literal","value":"
|
|
384
|
-
var peg$c14 = {"type":"literal","value":"
|
|
385
|
-
var peg$c15 = {"type":"
|
|
386
|
-
var peg$c16 = {"type":"
|
|
387
|
-
var peg$c17 = {"type":"literal","value":"
|
|
388
|
-
var peg$c18 = {"type":"
|
|
389
|
-
var peg$c19 = {"type":"
|
|
390
|
-
var peg$c20 = {"type":"other","description":"
|
|
391
|
-
var peg$c21 = {"type":"
|
|
392
|
-
var peg$c22 = {"type":"
|
|
393
|
-
var peg$c23 = {"type":"
|
|
380
|
+
var peg$c10 = {"type":"literal","value":"$","description":"\"$\""};
|
|
381
|
+
var peg$c11 = {"type":"literal","value":"@","description":"\"@\""};
|
|
382
|
+
var peg$c12 = {"type":"literal","value":":","description":"\":\""};
|
|
383
|
+
var peg$c13 = {"type":"literal","value":"<","description":"\"<\""};
|
|
384
|
+
var peg$c14 = {"type":"literal","value":"&","description":"\"&\""};
|
|
385
|
+
var peg$c15 = {"type":"literal","value":">","description":"\">\""};
|
|
386
|
+
var peg$c16 = {"type":"class","value":"\"$\", \"&\" or \"!\"","description":"\"$\", \"&\" or \"!\""};
|
|
387
|
+
var peg$c17 = {"type":"literal","value":"(","description":"\"(\""};
|
|
388
|
+
var peg$c18 = {"type":"literal","value":")","description":"\")\""};
|
|
389
|
+
var peg$c19 = {"type":"class","value":"\"?\", \"*\" or \"+\"","description":"\"?\", \"*\" or \"+\""};
|
|
390
|
+
var peg$c20 = {"type":"other","description":"literal"};
|
|
391
|
+
var peg$c21 = {"type":"other","description":"character class"};
|
|
392
|
+
var peg$c22 = {"type":"literal","value":".","description":"\".\""};
|
|
393
|
+
var peg$c23 = {"type":"class","value":"\"&\" or \"!\"","description":"\"&\" or \"!\""};
|
|
394
|
+
var peg$c24 = {"type":"literal","value":"==","description":"\"==\""};
|
|
395
|
+
var peg$c25 = {"type":"literal","value":"!=","description":"\"!=\""};
|
|
396
|
+
var peg$c26 = {"type":"literal","value":"++","description":"\"++\""};
|
|
394
397
|
|
|
395
398
|
// actions
|
|
396
399
|
function peg$a0(initializer, rules) {
|
|
@@ -555,7 +558,15 @@ function peg$parse(input, options = {}) {
|
|
|
555
558
|
};
|
|
556
559
|
|
|
557
560
|
}
|
|
558
|
-
function peg$a20(
|
|
561
|
+
function peg$a20(name) {
|
|
562
|
+
|
|
563
|
+
return {
|
|
564
|
+
type: "labeled",
|
|
565
|
+
value: name
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
}
|
|
569
|
+
function peg$a21(p, el) {
|
|
559
570
|
|
|
560
571
|
if (p !== null) {
|
|
561
572
|
el.picked = true;
|
|
@@ -563,25 +574,25 @@ function peg$parse(input, options = {}) {
|
|
|
563
574
|
return el;
|
|
564
575
|
|
|
565
576
|
}
|
|
566
|
-
function peg$
|
|
577
|
+
function peg$a22() {
|
|
567
578
|
return "\b";
|
|
568
579
|
}
|
|
569
|
-
function peg$
|
|
580
|
+
function peg$a23() {
|
|
570
581
|
return "\f";
|
|
571
582
|
}
|
|
572
|
-
function peg$
|
|
583
|
+
function peg$a24() {
|
|
573
584
|
return "\n";
|
|
574
585
|
}
|
|
575
|
-
function peg$
|
|
586
|
+
function peg$a25() {
|
|
576
587
|
return "\r";
|
|
577
588
|
}
|
|
578
|
-
function peg$
|
|
589
|
+
function peg$a26() {
|
|
579
590
|
return "\t";
|
|
580
591
|
}
|
|
581
|
-
function peg$
|
|
592
|
+
function peg$a27() {
|
|
582
593
|
return "\x0B";
|
|
583
594
|
}
|
|
584
|
-
function peg$
|
|
595
|
+
function peg$a28(label, ampersand, parameter) {
|
|
585
596
|
|
|
586
597
|
return {
|
|
587
598
|
type: "labeled_param",
|
|
@@ -592,7 +603,7 @@ function peg$parse(input, options = {}) {
|
|
|
592
603
|
};
|
|
593
604
|
|
|
594
605
|
}
|
|
595
|
-
function peg$
|
|
606
|
+
function peg$a29(label, expression) {
|
|
596
607
|
|
|
597
608
|
return {
|
|
598
609
|
type: "labeled",
|
|
@@ -602,7 +613,7 @@ function peg$parse(input, options = {}) {
|
|
|
602
613
|
};
|
|
603
614
|
|
|
604
615
|
}
|
|
605
|
-
function peg$
|
|
616
|
+
function peg$a30(operator, expression) {
|
|
606
617
|
|
|
607
618
|
return {
|
|
608
619
|
type: OPS_TO_PREFIXED_TYPES[operator],
|
|
@@ -611,7 +622,7 @@ function peg$parse(input, options = {}) {
|
|
|
611
622
|
};
|
|
612
623
|
|
|
613
624
|
}
|
|
614
|
-
function peg$
|
|
625
|
+
function peg$a31(expression, operator) {
|
|
615
626
|
|
|
616
627
|
return {
|
|
617
628
|
type: OPS_TO_SUFFIXED_TYPES[operator],
|
|
@@ -620,7 +631,7 @@ function peg$parse(input, options = {}) {
|
|
|
620
631
|
};
|
|
621
632
|
|
|
622
633
|
}
|
|
623
|
-
function peg$
|
|
634
|
+
function peg$a32(value, ignoreCase) {
|
|
624
635
|
|
|
625
636
|
return {
|
|
626
637
|
type: "literal",
|
|
@@ -630,7 +641,7 @@ function peg$parse(input, options = {}) {
|
|
|
630
641
|
};
|
|
631
642
|
|
|
632
643
|
}
|
|
633
|
-
function peg$
|
|
644
|
+
function peg$a33(inverted, parts, ignoreCase) {
|
|
634
645
|
|
|
635
646
|
return {
|
|
636
647
|
type: "class",
|
|
@@ -642,10 +653,10 @@ function peg$parse(input, options = {}) {
|
|
|
642
653
|
};
|
|
643
654
|
|
|
644
655
|
}
|
|
645
|
-
function peg$
|
|
656
|
+
function peg$a34() {
|
|
646
657
|
return { type: "any", location: location() };
|
|
647
658
|
}
|
|
648
|
-
function peg$
|
|
659
|
+
function peg$a35(name, assign) {
|
|
649
660
|
|
|
650
661
|
return {
|
|
651
662
|
type: "rule_ref",
|
|
@@ -655,7 +666,7 @@ function peg$parse(input, options = {}) {
|
|
|
655
666
|
};
|
|
656
667
|
|
|
657
668
|
}
|
|
658
|
-
function peg$
|
|
669
|
+
function peg$a36(operator, code) {
|
|
659
670
|
|
|
660
671
|
return {
|
|
661
672
|
type: OPS_TO_SEMANTIC_PREDICATE_TYPES[operator],
|
|
@@ -664,16 +675,24 @@ function peg$parse(input, options = {}) {
|
|
|
664
675
|
};
|
|
665
676
|
|
|
666
677
|
}
|
|
667
|
-
function peg$
|
|
678
|
+
function peg$a37(operator, parameter, assert) {
|
|
668
679
|
|
|
680
|
+
var type = OPS_TO_PARAMETER_PREDICATE_TYPES[operator];
|
|
681
|
+
if (assert) {
|
|
682
|
+
if (assert[0] === "!=") {
|
|
683
|
+
type = OPS_INVERT[type];
|
|
684
|
+
}
|
|
685
|
+
assert = assert[1];
|
|
686
|
+
}
|
|
669
687
|
return {
|
|
670
|
-
type:
|
|
688
|
+
type: type,
|
|
671
689
|
parameter: parameter,
|
|
690
|
+
assert: assert,
|
|
672
691
|
location: location()
|
|
673
692
|
};
|
|
674
693
|
|
|
675
694
|
}
|
|
676
|
-
function peg$
|
|
695
|
+
function peg$a38(begin, end) {
|
|
677
696
|
|
|
678
697
|
if (begin.charCodeAt(0) > end.charCodeAt(0)) {
|
|
679
698
|
error(
|
|
@@ -684,7 +703,7 @@ function peg$parse(input, options = {}) {
|
|
|
684
703
|
return [begin, end];
|
|
685
704
|
|
|
686
705
|
}
|
|
687
|
-
function peg$
|
|
706
|
+
function peg$a39(ampersand, name, assign) {
|
|
688
707
|
|
|
689
708
|
var type, value;
|
|
690
709
|
if (assign) {
|
|
@@ -702,7 +721,7 @@ function peg$parse(input, options = {}) {
|
|
|
702
721
|
};
|
|
703
722
|
|
|
704
723
|
}
|
|
705
|
-
function peg$
|
|
724
|
+
function peg$a40() {
|
|
706
725
|
|
|
707
726
|
return {
|
|
708
727
|
type: "increment",
|
|
@@ -735,6 +754,15 @@ function peg$parse(input, options = {}) {
|
|
|
735
754
|
"!": "parameter_not"
|
|
736
755
|
};
|
|
737
756
|
|
|
757
|
+
var OPS_INVERT = {
|
|
758
|
+
"parameter_and": "parameter_not",
|
|
759
|
+
"parameter_not": "parameter_and",
|
|
760
|
+
"semantic_and": "semantic_not",
|
|
761
|
+
"semantic_not": "semantic_and",
|
|
762
|
+
"simple_and": "simple_not",
|
|
763
|
+
"simple_not": "simple_and",
|
|
764
|
+
};
|
|
765
|
+
|
|
738
766
|
|
|
739
767
|
|
|
740
768
|
// generated
|
|
@@ -2366,6 +2394,10 @@ function peg$parse(input, options = {}) {
|
|
|
2366
2394
|
break choice_1;
|
|
2367
2395
|
}
|
|
2368
2396
|
r1 = peg$parseParameterValueString(silence);
|
|
2397
|
+
if (r1!==peg$FAILED) {
|
|
2398
|
+
break choice_1;
|
|
2399
|
+
}
|
|
2400
|
+
r1 = peg$parseParameterValueLabeled(silence);
|
|
2369
2401
|
} // choice_1
|
|
2370
2402
|
return r1;
|
|
2371
2403
|
}
|
|
@@ -2650,6 +2682,39 @@ function peg$parse(input, options = {}) {
|
|
|
2650
2682
|
// free p2
|
|
2651
2683
|
return r1;
|
|
2652
2684
|
}
|
|
2685
|
+
function peg$parseParameterValueLabeled(silence) {
|
|
2686
|
+
var r1,p2,p3,r4,r5;
|
|
2687
|
+
p2 = peg$currPos;
|
|
2688
|
+
seq_1: {
|
|
2689
|
+
p3 = peg$currPos;
|
|
2690
|
+
if (input.charCodeAt(peg$currPos) === 36) {
|
|
2691
|
+
r4 = true;
|
|
2692
|
+
peg$currPos += 1;
|
|
2693
|
+
} else {
|
|
2694
|
+
if (!silence) { peg$fail(peg$c10); }
|
|
2695
|
+
r4 = peg$FAILED;
|
|
2696
|
+
r1 = peg$FAILED;
|
|
2697
|
+
break seq_1;
|
|
2698
|
+
}
|
|
2699
|
+
peg$discard__();
|
|
2700
|
+
r5 = peg$parseIdentifier(silence);
|
|
2701
|
+
// name <- r5
|
|
2702
|
+
if (r5===peg$FAILED) {
|
|
2703
|
+
peg$currPos = p3;
|
|
2704
|
+
r1 = peg$FAILED;
|
|
2705
|
+
break seq_1;
|
|
2706
|
+
}
|
|
2707
|
+
r1 = true;
|
|
2708
|
+
} // seq_1
|
|
2709
|
+
if (r1!==peg$FAILED) {
|
|
2710
|
+
peg$savedPos = p2;
|
|
2711
|
+
r1 = peg$a20(r5);
|
|
2712
|
+
}
|
|
2713
|
+
// free r4
|
|
2714
|
+
// free p3
|
|
2715
|
+
// free p2
|
|
2716
|
+
return r1;
|
|
2717
|
+
}
|
|
2653
2718
|
function peg$parsePickedSequenceElement(silence) {
|
|
2654
2719
|
var r1,p2,p3,r4,r5;
|
|
2655
2720
|
p2 = peg$currPos;
|
|
@@ -2678,7 +2743,7 @@ function peg$parse(input, options = {}) {
|
|
|
2678
2743
|
} // seq_1
|
|
2679
2744
|
if (r1!==peg$FAILED) {
|
|
2680
2745
|
peg$savedPos = p2;
|
|
2681
|
-
r1 = peg$
|
|
2746
|
+
r1 = peg$a21(r4, r5);
|
|
2682
2747
|
}
|
|
2683
2748
|
// free p3
|
|
2684
2749
|
// free p2
|
|
@@ -2713,7 +2778,7 @@ function peg$parse(input, options = {}) {
|
|
|
2713
2778
|
r1 = true;
|
|
2714
2779
|
peg$currPos += 1;
|
|
2715
2780
|
peg$savedPos = p2;
|
|
2716
|
-
r1 = peg$
|
|
2781
|
+
r1 = peg$a22();
|
|
2717
2782
|
break choice_1;
|
|
2718
2783
|
} else {
|
|
2719
2784
|
r1 = peg$FAILED;
|
|
@@ -2724,7 +2789,7 @@ function peg$parse(input, options = {}) {
|
|
|
2724
2789
|
r1 = true;
|
|
2725
2790
|
peg$currPos += 1;
|
|
2726
2791
|
peg$savedPos = p2;
|
|
2727
|
-
r1 = peg$
|
|
2792
|
+
r1 = peg$a23();
|
|
2728
2793
|
break choice_1;
|
|
2729
2794
|
} else {
|
|
2730
2795
|
r1 = peg$FAILED;
|
|
@@ -2735,7 +2800,7 @@ function peg$parse(input, options = {}) {
|
|
|
2735
2800
|
r1 = true;
|
|
2736
2801
|
peg$currPos += 1;
|
|
2737
2802
|
peg$savedPos = p2;
|
|
2738
|
-
r1 = peg$
|
|
2803
|
+
r1 = peg$a24();
|
|
2739
2804
|
break choice_1;
|
|
2740
2805
|
} else {
|
|
2741
2806
|
r1 = peg$FAILED;
|
|
@@ -2746,7 +2811,7 @@ function peg$parse(input, options = {}) {
|
|
|
2746
2811
|
r1 = true;
|
|
2747
2812
|
peg$currPos += 1;
|
|
2748
2813
|
peg$savedPos = p2;
|
|
2749
|
-
r1 = peg$
|
|
2814
|
+
r1 = peg$a25();
|
|
2750
2815
|
break choice_1;
|
|
2751
2816
|
} else {
|
|
2752
2817
|
r1 = peg$FAILED;
|
|
@@ -2757,7 +2822,7 @@ function peg$parse(input, options = {}) {
|
|
|
2757
2822
|
r1 = true;
|
|
2758
2823
|
peg$currPos += 1;
|
|
2759
2824
|
peg$savedPos = p2;
|
|
2760
|
-
r1 = peg$
|
|
2825
|
+
r1 = peg$a26();
|
|
2761
2826
|
break choice_1;
|
|
2762
2827
|
} else {
|
|
2763
2828
|
r1 = peg$FAILED;
|
|
@@ -2768,7 +2833,7 @@ function peg$parse(input, options = {}) {
|
|
|
2768
2833
|
r1 = true;
|
|
2769
2834
|
peg$currPos += 1;
|
|
2770
2835
|
peg$savedPos = p2;
|
|
2771
|
-
r1 = peg$
|
|
2836
|
+
r1 = peg$a27();
|
|
2772
2837
|
} else {
|
|
2773
2838
|
r1 = peg$FAILED;
|
|
2774
2839
|
}
|
|
@@ -2998,7 +3063,7 @@ function peg$parse(input, options = {}) {
|
|
|
2998
3063
|
r1 = "@";
|
|
2999
3064
|
peg$currPos += 1;
|
|
3000
3065
|
} else {
|
|
3001
|
-
if (!silence) { peg$fail(peg$
|
|
3066
|
+
if (!silence) { peg$fail(peg$c11); }
|
|
3002
3067
|
r1 = peg$FAILED;
|
|
3003
3068
|
}
|
|
3004
3069
|
return r1;
|
|
@@ -4146,7 +4211,7 @@ function peg$parse(input, options = {}) {
|
|
|
4146
4211
|
r5 = true;
|
|
4147
4212
|
peg$currPos += 1;
|
|
4148
4213
|
} else {
|
|
4149
|
-
if (!silence) { peg$fail(peg$
|
|
4214
|
+
if (!silence) { peg$fail(peg$c12); }
|
|
4150
4215
|
r5 = peg$FAILED;
|
|
4151
4216
|
peg$currPos = p3;
|
|
4152
4217
|
r1 = peg$FAILED;
|
|
@@ -4157,7 +4222,7 @@ function peg$parse(input, options = {}) {
|
|
|
4157
4222
|
r6 = true;
|
|
4158
4223
|
peg$currPos += 1;
|
|
4159
4224
|
} else {
|
|
4160
|
-
if (!silence) { peg$fail(peg$
|
|
4225
|
+
if (!silence) { peg$fail(peg$c13); }
|
|
4161
4226
|
r6 = peg$FAILED;
|
|
4162
4227
|
peg$currPos = p3;
|
|
4163
4228
|
r1 = peg$FAILED;
|
|
@@ -4168,7 +4233,7 @@ function peg$parse(input, options = {}) {
|
|
|
4168
4233
|
r7 = "&";
|
|
4169
4234
|
peg$currPos += 1;
|
|
4170
4235
|
} else {
|
|
4171
|
-
if (!silence) { peg$fail(peg$
|
|
4236
|
+
if (!silence) { peg$fail(peg$c14); }
|
|
4172
4237
|
r7 = peg$FAILED;
|
|
4173
4238
|
r7 = null;
|
|
4174
4239
|
}
|
|
@@ -4186,7 +4251,7 @@ function peg$parse(input, options = {}) {
|
|
|
4186
4251
|
r9 = true;
|
|
4187
4252
|
peg$currPos += 1;
|
|
4188
4253
|
} else {
|
|
4189
|
-
if (!silence) { peg$fail(peg$
|
|
4254
|
+
if (!silence) { peg$fail(peg$c15); }
|
|
4190
4255
|
r9 = peg$FAILED;
|
|
4191
4256
|
peg$currPos = p3;
|
|
4192
4257
|
r1 = peg$FAILED;
|
|
@@ -4196,7 +4261,7 @@ function peg$parse(input, options = {}) {
|
|
|
4196
4261
|
} // seq_1
|
|
4197
4262
|
if (r1!==peg$FAILED) {
|
|
4198
4263
|
peg$savedPos = p2;
|
|
4199
|
-
r1 = peg$
|
|
4264
|
+
r1 = peg$a28(r4, r7, r8);
|
|
4200
4265
|
}
|
|
4201
4266
|
// free r5,r6,r9
|
|
4202
4267
|
// free p3
|
|
@@ -4219,7 +4284,7 @@ function peg$parse(input, options = {}) {
|
|
|
4219
4284
|
r5 = true;
|
|
4220
4285
|
peg$currPos += 1;
|
|
4221
4286
|
} else {
|
|
4222
|
-
if (!silence) { peg$fail(peg$
|
|
4287
|
+
if (!silence) { peg$fail(peg$c12); }
|
|
4223
4288
|
r5 = peg$FAILED;
|
|
4224
4289
|
peg$currPos = p3;
|
|
4225
4290
|
r1 = peg$FAILED;
|
|
@@ -4237,7 +4302,7 @@ function peg$parse(input, options = {}) {
|
|
|
4237
4302
|
} // seq_1
|
|
4238
4303
|
if (r1!==peg$FAILED) {
|
|
4239
4304
|
peg$savedPos = p2;
|
|
4240
|
-
r1 = peg$
|
|
4305
|
+
r1 = peg$a29(r4, r6);
|
|
4241
4306
|
}
|
|
4242
4307
|
// free r5
|
|
4243
4308
|
// free p3
|
|
@@ -4268,7 +4333,7 @@ function peg$parse(input, options = {}) {
|
|
|
4268
4333
|
} // seq_1
|
|
4269
4334
|
if (r1!==peg$FAILED) {
|
|
4270
4335
|
peg$savedPos = p2;
|
|
4271
|
-
r1 = peg$
|
|
4336
|
+
r1 = peg$a30(r4, r5);
|
|
4272
4337
|
break choice_1;
|
|
4273
4338
|
}
|
|
4274
4339
|
// free p3
|
|
@@ -4306,7 +4371,7 @@ function peg$parse(input, options = {}) {
|
|
|
4306
4371
|
r1 = true;
|
|
4307
4372
|
peg$currPos += 1;
|
|
4308
4373
|
peg$savedPos = p2;
|
|
4309
|
-
r1 = peg$
|
|
4374
|
+
r1 = peg$a22();
|
|
4310
4375
|
break choice_1;
|
|
4311
4376
|
} else {
|
|
4312
4377
|
r1 = peg$FAILED;
|
|
@@ -4317,7 +4382,7 @@ function peg$parse(input, options = {}) {
|
|
|
4317
4382
|
r1 = true;
|
|
4318
4383
|
peg$currPos += 1;
|
|
4319
4384
|
peg$savedPos = p2;
|
|
4320
|
-
r1 = peg$
|
|
4385
|
+
r1 = peg$a23();
|
|
4321
4386
|
break choice_1;
|
|
4322
4387
|
} else {
|
|
4323
4388
|
r1 = peg$FAILED;
|
|
@@ -4328,7 +4393,7 @@ function peg$parse(input, options = {}) {
|
|
|
4328
4393
|
r1 = true;
|
|
4329
4394
|
peg$currPos += 1;
|
|
4330
4395
|
peg$savedPos = p2;
|
|
4331
|
-
r1 = peg$
|
|
4396
|
+
r1 = peg$a24();
|
|
4332
4397
|
break choice_1;
|
|
4333
4398
|
} else {
|
|
4334
4399
|
r1 = peg$FAILED;
|
|
@@ -4339,7 +4404,7 @@ function peg$parse(input, options = {}) {
|
|
|
4339
4404
|
r1 = true;
|
|
4340
4405
|
peg$currPos += 1;
|
|
4341
4406
|
peg$savedPos = p2;
|
|
4342
|
-
r1 = peg$
|
|
4407
|
+
r1 = peg$a25();
|
|
4343
4408
|
break choice_1;
|
|
4344
4409
|
} else {
|
|
4345
4410
|
r1 = peg$FAILED;
|
|
@@ -4350,7 +4415,7 @@ function peg$parse(input, options = {}) {
|
|
|
4350
4415
|
r1 = true;
|
|
4351
4416
|
peg$currPos += 1;
|
|
4352
4417
|
peg$savedPos = p2;
|
|
4353
|
-
r1 = peg$
|
|
4418
|
+
r1 = peg$a26();
|
|
4354
4419
|
break choice_1;
|
|
4355
4420
|
} else {
|
|
4356
4421
|
r1 = peg$FAILED;
|
|
@@ -4361,7 +4426,7 @@ function peg$parse(input, options = {}) {
|
|
|
4361
4426
|
r1 = true;
|
|
4362
4427
|
peg$currPos += 1;
|
|
4363
4428
|
peg$savedPos = p2;
|
|
4364
|
-
r1 = peg$
|
|
4429
|
+
r1 = peg$a27();
|
|
4365
4430
|
} else {
|
|
4366
4431
|
r1 = peg$FAILED;
|
|
4367
4432
|
}
|
|
@@ -4458,7 +4523,7 @@ function peg$parse(input, options = {}) {
|
|
|
4458
4523
|
peg$currPos++;
|
|
4459
4524
|
} else {
|
|
4460
4525
|
r1 = peg$FAILED;
|
|
4461
|
-
if (!silence) { peg$fail(peg$
|
|
4526
|
+
if (!silence) { peg$fail(peg$c16); }
|
|
4462
4527
|
}
|
|
4463
4528
|
return r1;
|
|
4464
4529
|
}
|
|
@@ -4486,7 +4551,7 @@ function peg$parse(input, options = {}) {
|
|
|
4486
4551
|
} // seq_1
|
|
4487
4552
|
if (r1!==peg$FAILED) {
|
|
4488
4553
|
peg$savedPos = p2;
|
|
4489
|
-
r1 = peg$
|
|
4554
|
+
r1 = peg$a31(r4, r5);
|
|
4490
4555
|
break choice_1;
|
|
4491
4556
|
}
|
|
4492
4557
|
// free p3
|
|
@@ -4575,7 +4640,7 @@ function peg$parse(input, options = {}) {
|
|
|
4575
4640
|
r3 = true;
|
|
4576
4641
|
peg$currPos += 1;
|
|
4577
4642
|
} else {
|
|
4578
|
-
if (!silence) { peg$fail(peg$
|
|
4643
|
+
if (!silence) { peg$fail(peg$c17); }
|
|
4579
4644
|
r3 = peg$FAILED;
|
|
4580
4645
|
r1 = peg$FAILED;
|
|
4581
4646
|
break seq_1;
|
|
@@ -4592,7 +4657,7 @@ function peg$parse(input, options = {}) {
|
|
|
4592
4657
|
r4 = true;
|
|
4593
4658
|
peg$currPos += 1;
|
|
4594
4659
|
} else {
|
|
4595
|
-
if (!silence) { peg$fail(peg$
|
|
4660
|
+
if (!silence) { peg$fail(peg$c18); }
|
|
4596
4661
|
r4 = peg$FAILED;
|
|
4597
4662
|
peg$currPos = p2;
|
|
4598
4663
|
r1 = peg$FAILED;
|
|
@@ -4610,7 +4675,7 @@ function peg$parse(input, options = {}) {
|
|
|
4610
4675
|
peg$currPos++;
|
|
4611
4676
|
} else {
|
|
4612
4677
|
r1 = peg$FAILED;
|
|
4613
|
-
if (!silence) { peg$fail(peg$
|
|
4678
|
+
if (!silence) { peg$fail(peg$c19); }
|
|
4614
4679
|
}
|
|
4615
4680
|
return r1;
|
|
4616
4681
|
}
|
|
@@ -4697,9 +4762,9 @@ function peg$parse(input, options = {}) {
|
|
|
4697
4762
|
} // seq_1
|
|
4698
4763
|
if (r1!==peg$FAILED) {
|
|
4699
4764
|
peg$savedPos = p2;
|
|
4700
|
-
r1 = peg$
|
|
4765
|
+
r1 = peg$a32(r4, r5);
|
|
4701
4766
|
} else {
|
|
4702
|
-
if (!silence) { peg$fail(peg$
|
|
4767
|
+
if (!silence) { peg$fail(peg$c20); }
|
|
4703
4768
|
}
|
|
4704
4769
|
// free p3
|
|
4705
4770
|
// free p2
|
|
@@ -4764,9 +4829,9 @@ function peg$parse(input, options = {}) {
|
|
|
4764
4829
|
} // seq_1
|
|
4765
4830
|
if (r1!==peg$FAILED) {
|
|
4766
4831
|
peg$savedPos = p2;
|
|
4767
|
-
r1 = peg$
|
|
4832
|
+
r1 = peg$a33(r5, r6, r8);
|
|
4768
4833
|
} else {
|
|
4769
|
-
if (!silence) { peg$fail(peg$
|
|
4834
|
+
if (!silence) { peg$fail(peg$c21); }
|
|
4770
4835
|
}
|
|
4771
4836
|
// free r4,r7
|
|
4772
4837
|
// free p3
|
|
@@ -4780,9 +4845,9 @@ function peg$parse(input, options = {}) {
|
|
|
4780
4845
|
r1 = true;
|
|
4781
4846
|
peg$currPos += 1;
|
|
4782
4847
|
peg$savedPos = p2;
|
|
4783
|
-
r1 = peg$
|
|
4848
|
+
r1 = peg$a34();
|
|
4784
4849
|
} else {
|
|
4785
|
-
if (!silence) { peg$fail(peg$
|
|
4850
|
+
if (!silence) { peg$fail(peg$c22); }
|
|
4786
4851
|
r1 = peg$FAILED;
|
|
4787
4852
|
}
|
|
4788
4853
|
// free p2
|
|
@@ -4862,7 +4927,7 @@ function peg$parse(input, options = {}) {
|
|
|
4862
4927
|
} // seq_1
|
|
4863
4928
|
if (r1!==peg$FAILED) {
|
|
4864
4929
|
peg$savedPos = p2;
|
|
4865
|
-
r1 = peg$
|
|
4930
|
+
r1 = peg$a35(r4, r5);
|
|
4866
4931
|
}
|
|
4867
4932
|
// free r6
|
|
4868
4933
|
// free p3
|
|
@@ -4892,14 +4957,14 @@ function peg$parse(input, options = {}) {
|
|
|
4892
4957
|
} // seq_1
|
|
4893
4958
|
if (r1!==peg$FAILED) {
|
|
4894
4959
|
peg$savedPos = p2;
|
|
4895
|
-
r1 = peg$
|
|
4960
|
+
r1 = peg$a36(r4, r5);
|
|
4896
4961
|
}
|
|
4897
4962
|
// free p3
|
|
4898
4963
|
// free p2
|
|
4899
4964
|
return r1;
|
|
4900
4965
|
}
|
|
4901
4966
|
function peg$parseParameterPredicateExpression(silence) {
|
|
4902
|
-
var r1,p2,p3,r4,r5,r6,r7;
|
|
4967
|
+
var r1,p2,p3,r4,r5,r6,r7,p8,r9,r10;
|
|
4903
4968
|
p2 = peg$currPos;
|
|
4904
4969
|
seq_1: {
|
|
4905
4970
|
p3 = peg$currPos;
|
|
@@ -4914,7 +4979,7 @@ function peg$parse(input, options = {}) {
|
|
|
4914
4979
|
r5 = true;
|
|
4915
4980
|
peg$currPos += 1;
|
|
4916
4981
|
} else {
|
|
4917
|
-
if (!silence) { peg$fail(peg$
|
|
4982
|
+
if (!silence) { peg$fail(peg$c13); }
|
|
4918
4983
|
r5 = peg$FAILED;
|
|
4919
4984
|
peg$currPos = p3;
|
|
4920
4985
|
r1 = peg$FAILED;
|
|
@@ -4929,12 +4994,35 @@ function peg$parse(input, options = {}) {
|
|
|
4929
4994
|
break seq_1;
|
|
4930
4995
|
}
|
|
4931
4996
|
peg$discard__();
|
|
4997
|
+
seq_2: {
|
|
4998
|
+
p8 = peg$currPos;
|
|
4999
|
+
r9 = peg$parseEqualityOperator(silence);
|
|
5000
|
+
if (r9===peg$FAILED) {
|
|
5001
|
+
r7 = peg$FAILED;
|
|
5002
|
+
break seq_2;
|
|
5003
|
+
}
|
|
5004
|
+
peg$discard__();
|
|
5005
|
+
r10 = peg$parseParameterValue(silence);
|
|
5006
|
+
if (r10===peg$FAILED) {
|
|
5007
|
+
peg$currPos = p8;
|
|
5008
|
+
r7 = peg$FAILED;
|
|
5009
|
+
break seq_2;
|
|
5010
|
+
}
|
|
5011
|
+
peg$discard__();
|
|
5012
|
+
r7 = [r9,r10];
|
|
5013
|
+
} // seq_2
|
|
5014
|
+
if (r7===peg$FAILED) {
|
|
5015
|
+
r7 = null;
|
|
5016
|
+
}
|
|
5017
|
+
// free r9,r10
|
|
5018
|
+
// free p8
|
|
5019
|
+
// assert <- r7
|
|
4932
5020
|
if (input.charCodeAt(peg$currPos) === 62) {
|
|
4933
|
-
|
|
5021
|
+
r10 = true;
|
|
4934
5022
|
peg$currPos += 1;
|
|
4935
5023
|
} else {
|
|
4936
|
-
if (!silence) { peg$fail(peg$
|
|
4937
|
-
|
|
5024
|
+
if (!silence) { peg$fail(peg$c15); }
|
|
5025
|
+
r10 = peg$FAILED;
|
|
4938
5026
|
peg$currPos = p3;
|
|
4939
5027
|
r1 = peg$FAILED;
|
|
4940
5028
|
break seq_1;
|
|
@@ -4943,9 +5031,9 @@ function peg$parse(input, options = {}) {
|
|
|
4943
5031
|
} // seq_1
|
|
4944
5032
|
if (r1!==peg$FAILED) {
|
|
4945
5033
|
peg$savedPos = p2;
|
|
4946
|
-
r1 = peg$
|
|
5034
|
+
r1 = peg$a37(r4, r6, r7);
|
|
4947
5035
|
}
|
|
4948
|
-
// free r5,
|
|
5036
|
+
// free r5,r10
|
|
4949
5037
|
// free p3
|
|
4950
5038
|
// free p2
|
|
4951
5039
|
return r1;
|
|
@@ -4981,7 +5069,7 @@ function peg$parse(input, options = {}) {
|
|
|
4981
5069
|
} // seq_1
|
|
4982
5070
|
if (r1!==peg$FAILED) {
|
|
4983
5071
|
peg$savedPos = p2;
|
|
4984
|
-
r1 = peg$
|
|
5072
|
+
r1 = peg$a38(r4, r6);
|
|
4985
5073
|
}
|
|
4986
5074
|
// free r5
|
|
4987
5075
|
// free p3
|
|
@@ -5074,7 +5162,7 @@ function peg$parse(input, options = {}) {
|
|
|
5074
5162
|
r4 = true;
|
|
5075
5163
|
peg$currPos += 1;
|
|
5076
5164
|
} else {
|
|
5077
|
-
if (!silence) { peg$fail(peg$
|
|
5165
|
+
if (!silence) { peg$fail(peg$c13); }
|
|
5078
5166
|
r4 = peg$FAILED;
|
|
5079
5167
|
r1 = peg$FAILED;
|
|
5080
5168
|
break seq_1;
|
|
@@ -5125,7 +5213,7 @@ function peg$parse(input, options = {}) {
|
|
|
5125
5213
|
r9 = true;
|
|
5126
5214
|
peg$currPos += 1;
|
|
5127
5215
|
} else {
|
|
5128
|
-
if (!silence) { peg$fail(peg$
|
|
5216
|
+
if (!silence) { peg$fail(peg$c15); }
|
|
5129
5217
|
r9 = peg$FAILED;
|
|
5130
5218
|
peg$currPos = p3;
|
|
5131
5219
|
r1 = peg$FAILED;
|
|
@@ -5343,7 +5431,7 @@ function peg$parse(input, options = {}) {
|
|
|
5343
5431
|
peg$currPos++;
|
|
5344
5432
|
} else {
|
|
5345
5433
|
r1 = peg$FAILED;
|
|
5346
|
-
if (!silence) { peg$fail(peg$
|
|
5434
|
+
if (!silence) { peg$fail(peg$c23); }
|
|
5347
5435
|
}
|
|
5348
5436
|
return r1;
|
|
5349
5437
|
}
|
|
@@ -5354,10 +5442,61 @@ function peg$parse(input, options = {}) {
|
|
|
5354
5442
|
peg$currPos++;
|
|
5355
5443
|
} else {
|
|
5356
5444
|
r1 = peg$FAILED;
|
|
5357
|
-
if (!silence) { peg$fail(peg$
|
|
5445
|
+
if (!silence) { peg$fail(peg$c23); }
|
|
5358
5446
|
}
|
|
5359
5447
|
return r1;
|
|
5360
5448
|
}
|
|
5449
|
+
function peg$parseEqualityOperator(silence) {
|
|
5450
|
+
var r1,p2,r3,r4;
|
|
5451
|
+
choice_1: {
|
|
5452
|
+
seq_1: {
|
|
5453
|
+
p2 = peg$currPos;
|
|
5454
|
+
r1 = input.substr(peg$currPos,2);
|
|
5455
|
+
if (r1 === "==") {
|
|
5456
|
+
peg$currPos += 2;
|
|
5457
|
+
} else {
|
|
5458
|
+
if (!silence) { peg$fail(peg$c24); }
|
|
5459
|
+
r1 = peg$FAILED;
|
|
5460
|
+
r1 = peg$FAILED;
|
|
5461
|
+
break seq_1;
|
|
5462
|
+
}
|
|
5463
|
+
if (input.charCodeAt(peg$currPos) === 61) {
|
|
5464
|
+
r3 = true;
|
|
5465
|
+
peg$currPos += 1;
|
|
5466
|
+
} else {
|
|
5467
|
+
if (!silence) { peg$fail(peg$c1); }
|
|
5468
|
+
r3 = peg$FAILED;
|
|
5469
|
+
r3 = null;
|
|
5470
|
+
}
|
|
5471
|
+
} // seq_1
|
|
5472
|
+
if (r1!==peg$FAILED) {
|
|
5473
|
+
break choice_1;
|
|
5474
|
+
}
|
|
5475
|
+
// free p2
|
|
5476
|
+
seq_2: {
|
|
5477
|
+
p2 = peg$currPos;
|
|
5478
|
+
r1 = input.substr(peg$currPos,2);
|
|
5479
|
+
if (r1 === "!=") {
|
|
5480
|
+
peg$currPos += 2;
|
|
5481
|
+
} else {
|
|
5482
|
+
if (!silence) { peg$fail(peg$c25); }
|
|
5483
|
+
r1 = peg$FAILED;
|
|
5484
|
+
r1 = peg$FAILED;
|
|
5485
|
+
break seq_2;
|
|
5486
|
+
}
|
|
5487
|
+
if (input.charCodeAt(peg$currPos) === 61) {
|
|
5488
|
+
r4 = true;
|
|
5489
|
+
peg$currPos += 1;
|
|
5490
|
+
} else {
|
|
5491
|
+
if (!silence) { peg$fail(peg$c1); }
|
|
5492
|
+
r4 = peg$FAILED;
|
|
5493
|
+
r4 = null;
|
|
5494
|
+
}
|
|
5495
|
+
} // seq_2
|
|
5496
|
+
// free p2
|
|
5497
|
+
} // choice_1
|
|
5498
|
+
return r1;
|
|
5499
|
+
}
|
|
5361
5500
|
function peg$parseParameterAssignment(silence) {
|
|
5362
5501
|
var r1,p2,p3,r4,r5,r6,p7,r8;
|
|
5363
5502
|
p2 = peg$currPos;
|
|
@@ -5367,7 +5506,7 @@ function peg$parse(input, options = {}) {
|
|
|
5367
5506
|
r4 = "&";
|
|
5368
5507
|
peg$currPos += 1;
|
|
5369
5508
|
} else {
|
|
5370
|
-
if (!silence) { peg$fail(peg$
|
|
5509
|
+
if (!silence) { peg$fail(peg$c14); }
|
|
5371
5510
|
r4 = peg$FAILED;
|
|
5372
5511
|
r4 = null;
|
|
5373
5512
|
}
|
|
@@ -5415,7 +5554,7 @@ function peg$parse(input, options = {}) {
|
|
|
5415
5554
|
} // seq_1
|
|
5416
5555
|
if (r1!==peg$FAILED) {
|
|
5417
5556
|
peg$savedPos = p2;
|
|
5418
|
-
r1 = peg$
|
|
5557
|
+
r1 = peg$a39(r4, r5, r6);
|
|
5419
5558
|
}
|
|
5420
5559
|
// free r8
|
|
5421
5560
|
// free p3
|
|
@@ -5429,9 +5568,9 @@ function peg$parse(input, options = {}) {
|
|
|
5429
5568
|
r1 = true;
|
|
5430
5569
|
peg$currPos += 2;
|
|
5431
5570
|
peg$savedPos = p2;
|
|
5432
|
-
r1 = peg$
|
|
5571
|
+
r1 = peg$a40();
|
|
5433
5572
|
} else {
|
|
5434
|
-
if (!silence) { peg$fail(peg$
|
|
5573
|
+
if (!silence) { peg$fail(peg$c26); }
|
|
5435
5574
|
r1 = peg$FAILED;
|
|
5436
5575
|
}
|
|
5437
5576
|
// free p2
|
package/lib/peg.js
CHANGED