Make current parse position visible in actions and predicates
The speed/size impact is insignificant. Speed impact ------------ Before: 214.11 kB/s After: 214.87 kB/s Difference: 0.35% Size impact ----------- Before: 1042691 b After: 1046731 b Difference: 0.38% (Measured by /tools/impact with Node.js v0.6.6 on x86_64 GNU/Linux.)
This commit is contained in:
parent
f47da5c682
commit
f2f88b87ea
|
@ -565,10 +565,10 @@ PEG.compiler.emitter = function(ast) {
|
||||||
'}'
|
'}'
|
||||||
],
|
],
|
||||||
semantic_and: [
|
semantic_and: [
|
||||||
'#{node.resultVar} = (function(#{keys(node.params).join(", ")}) {#{node.code}})(#{values(node.params).join(", ")}) ? "" : null;'
|
'#{node.resultVar} = (function(#{["offset"].concat(keys(node.params)).join(", ")}) {#{node.code}})(#{["pos"].concat(values(node.params)).join(", ")}) ? "" : null;'
|
||||||
],
|
],
|
||||||
semantic_not: [
|
semantic_not: [
|
||||||
'#{node.resultVar} = (function(#{keys(node.params).join(", ")}) {#{node.code}})(#{values(node.params).join(", ")}) ? null : "";'
|
'#{node.resultVar} = (function(#{["offset"].concat(keys(node.params)).join(", ")}) {#{node.code}})(#{["pos"].concat(values(node.params)).join(", ")}) ? null : "";'
|
||||||
],
|
],
|
||||||
optional: [
|
optional: [
|
||||||
'#block emit(node.expression)',
|
'#block emit(node.expression)',
|
||||||
|
@ -598,7 +598,7 @@ PEG.compiler.emitter = function(ast) {
|
||||||
'#{node.posVar} = pos;',
|
'#{node.posVar} = pos;',
|
||||||
'#block emit(node.expression)',
|
'#block emit(node.expression)',
|
||||||
'if (#{node.resultVar} !== null) {',
|
'if (#{node.resultVar} !== null) {',
|
||||||
' #{node.resultVar} = (function(#{keys(node.params).join(", ")}) {#{node.code}})(#{values(node.params).join(", ")});',
|
' #{node.resultVar} = (function(#{["offset"].concat(keys(node.params)).join(", ")}) {#{node.code}})(#{[node.posVar].concat(values(node.params)).join(", ")});',
|
||||||
'}',
|
'}',
|
||||||
'if (#{node.resultVar} === null) {',
|
'if (#{node.resultVar} === null) {',
|
||||||
' pos = #{node.posVar};',
|
' pos = #{node.posVar};',
|
||||||
|
|
144
src/parser.js
144
src/parser.js
|
@ -188,14 +188,14 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(initializer, rules) {
|
result0 = (function(offset, initializer, rules) {
|
||||||
return {
|
return {
|
||||||
type: "grammar",
|
type: "grammar",
|
||||||
initializer: initializer !== "" ? initializer : null,
|
initializer: initializer !== "" ? initializer : null,
|
||||||
rules: rules,
|
rules: rules,
|
||||||
startRule: rules[0].name
|
startRule: rules[0].name
|
||||||
};
|
};
|
||||||
})(result0[1], result0[2]);
|
})(pos0, result0[1], result0[2]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -236,12 +236,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(code) {
|
result0 = (function(offset, code) {
|
||||||
return {
|
return {
|
||||||
type: "initializer",
|
type: "initializer",
|
||||||
code: code
|
code: code
|
||||||
};
|
};
|
||||||
})(result0[0]);
|
})(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -301,14 +301,14 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(name, displayName, expression) {
|
result0 = (function(offset, name, displayName, expression) {
|
||||||
return {
|
return {
|
||||||
type: "rule",
|
type: "rule",
|
||||||
name: name,
|
name: name,
|
||||||
displayName: displayName !== "" ? displayName : null,
|
displayName: displayName !== "" ? displayName : null,
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[0], result0[1], result0[3]);
|
})(pos0, result0[0], result0[1], result0[3]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -379,7 +379,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(head, tail) {
|
result0 = (function(offset, head, tail) {
|
||||||
if (tail.length > 0) {
|
if (tail.length > 0) {
|
||||||
var alternatives = [head].concat(map(
|
var alternatives = [head].concat(map(
|
||||||
tail,
|
tail,
|
||||||
|
@ -392,7 +392,7 @@ PEG.parser = (function(){
|
||||||
} else {
|
} else {
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
})(result0[0], result0[1]);
|
})(pos0, result0[0], result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -437,7 +437,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(elements, code) {
|
result0 = (function(offset, elements, code) {
|
||||||
var expression = elements.length !== 1
|
var expression = elements.length !== 1
|
||||||
? {
|
? {
|
||||||
type: "sequence",
|
type: "sequence",
|
||||||
|
@ -449,7 +449,7 @@ PEG.parser = (function(){
|
||||||
expression: expression,
|
expression: expression,
|
||||||
code: code
|
code: code
|
||||||
};
|
};
|
||||||
})(result0[0], result0[1]);
|
})(pos0, result0[0], result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -463,14 +463,14 @@ PEG.parser = (function(){
|
||||||
result1 = parse_labeled();
|
result1 = parse_labeled();
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(elements) {
|
result0 = (function(offset, elements) {
|
||||||
return elements.length !== 1
|
return elements.length !== 1
|
||||||
? {
|
? {
|
||||||
type: "sequence",
|
type: "sequence",
|
||||||
elements: elements
|
elements: elements
|
||||||
}
|
}
|
||||||
: elements[0];
|
: elements[0];
|
||||||
})(result0);
|
})(pos0, result0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -517,13 +517,13 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(label, expression) {
|
result0 = (function(offset, label, expression) {
|
||||||
return {
|
return {
|
||||||
type: "labeled",
|
type: "labeled",
|
||||||
label: label,
|
label: label,
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[0], result0[2]);
|
})(pos0, result0[0], result0[2]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -566,12 +566,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(code) {
|
result0 = (function(offset, code) {
|
||||||
return {
|
return {
|
||||||
type: "semantic_and",
|
type: "semantic_and",
|
||||||
code: code
|
code: code
|
||||||
};
|
};
|
||||||
})(result0[1]);
|
})(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -593,12 +593,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(expression) {
|
result0 = (function(offset, expression) {
|
||||||
return {
|
return {
|
||||||
type: "simple_and",
|
type: "simple_and",
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[1]);
|
})(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -620,12 +620,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(code) {
|
result0 = (function(offset, code) {
|
||||||
return {
|
return {
|
||||||
type: "semantic_not",
|
type: "semantic_not",
|
||||||
code: code
|
code: code
|
||||||
};
|
};
|
||||||
})(result0[1]);
|
})(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -647,12 +647,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(expression) {
|
result0 = (function(offset, expression) {
|
||||||
return {
|
return {
|
||||||
type: "simple_not",
|
type: "simple_not",
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[1]);
|
})(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -698,12 +698,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(expression) {
|
result0 = (function(offset, expression) {
|
||||||
return {
|
return {
|
||||||
type: "optional",
|
type: "optional",
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[0]);
|
})(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -725,12 +725,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(expression) {
|
result0 = (function(offset, expression) {
|
||||||
return {
|
return {
|
||||||
type: "zero_or_more",
|
type: "zero_or_more",
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[0]);
|
})(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -752,12 +752,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(expression) {
|
result0 = (function(offset, expression) {
|
||||||
return {
|
return {
|
||||||
type: "one_or_more",
|
type: "one_or_more",
|
||||||
expression: expression
|
expression: expression
|
||||||
};
|
};
|
||||||
})(result0[0]);
|
})(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -825,12 +825,12 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(name) {
|
result0 = (function(offset, name) {
|
||||||
return {
|
return {
|
||||||
type: "rule_ref",
|
type: "rule_ref",
|
||||||
name: name
|
name: name
|
||||||
};
|
};
|
||||||
})(result0[0]);
|
})(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -841,7 +841,7 @@ PEG.parser = (function(){
|
||||||
pos0 = pos;
|
pos0 = pos;
|
||||||
result0 = parse_dot();
|
result0 = parse_dot();
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return { type: "any" }; })();
|
result0 = (function(offset) { return { type: "any" }; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -871,7 +871,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(expression) { return expression; })(result0[1]);
|
result0 = (function(offset, expression) { return expression; })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -916,7 +916,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(braced) { return braced.substr(1, braced.length - 2); })(result0[0]);
|
result0 = (function(offset, braced) { return braced.substr(1, braced.length - 2); })(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -993,9 +993,9 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(parts) {
|
result0 = (function(offset, parts) {
|
||||||
return "{" + parts.join("") + "}";
|
return "{" + parts.join("") + "}";
|
||||||
})(result0[1]);
|
})(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1031,7 +1031,7 @@ PEG.parser = (function(){
|
||||||
result0 = null;
|
result0 = null;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(chars) { return chars.join(""); })(result0);
|
result0 = (function(offset, chars) { return chars.join(""); })(pos0, result0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1106,7 +1106,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "="; })();
|
result0 = (function(offset) { return "="; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1154,7 +1154,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return ":"; })();
|
result0 = (function(offset) { return ":"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1202,7 +1202,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return ";"; })();
|
result0 = (function(offset) { return ";"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1250,7 +1250,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "/"; })();
|
result0 = (function(offset) { return "/"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1298,7 +1298,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "&"; })();
|
result0 = (function(offset) { return "&"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1346,7 +1346,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "!"; })();
|
result0 = (function(offset) { return "!"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1394,7 +1394,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "?"; })();
|
result0 = (function(offset) { return "?"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1442,7 +1442,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "*"; })();
|
result0 = (function(offset) { return "*"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1490,7 +1490,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "+"; })();
|
result0 = (function(offset) { return "+"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1538,7 +1538,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "("; })();
|
result0 = (function(offset) { return "("; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1586,7 +1586,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return ")"; })();
|
result0 = (function(offset) { return ")"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1634,7 +1634,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "."; })();
|
result0 = (function(offset) { return "."; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1758,9 +1758,9 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(head, tail) {
|
result0 = (function(offset, head, tail) {
|
||||||
return head + tail.join("");
|
return head + tail.join("");
|
||||||
})(result0[0], result0[1]);
|
})(pos0, result0[0], result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1823,13 +1823,13 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(value, flags) {
|
result0 = (function(offset, value, flags) {
|
||||||
return {
|
return {
|
||||||
type: "literal",
|
type: "literal",
|
||||||
value: value,
|
value: value,
|
||||||
ignoreCase: flags === "i"
|
ignoreCase: flags === "i"
|
||||||
};
|
};
|
||||||
})(result0[0], result0[1]);
|
})(pos0, result0[0], result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1877,7 +1877,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(string) { return string; })(result0[0]);
|
result0 = (function(offset, string) { return string; })(pos0, result0[0]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -1948,7 +1948,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(chars) { return chars.join(""); })(result0[1]);
|
result0 = (function(offset, chars) { return chars.join(""); })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2061,7 +2061,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(char_) { return char_; })(result0[1]);
|
result0 = (function(offset, char_) { return char_; })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2128,7 +2128,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(chars) { return chars.join(""); })(result0[1]);
|
result0 = (function(offset, chars) { return chars.join(""); })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2241,7 +2241,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(char_) { return char_; })(result0[1]);
|
result0 = (function(offset, char_) { return char_; })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2351,7 +2351,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(inverted, parts, flags) {
|
result0 = (function(offset, inverted, parts, flags) {
|
||||||
var partsConverted = map(parts, function(part) { return part.data; });
|
var partsConverted = map(parts, function(part) { return part.data; });
|
||||||
var rawText = "["
|
var rawText = "["
|
||||||
+ inverted
|
+ inverted
|
||||||
|
@ -2367,7 +2367,7 @@ PEG.parser = (function(){
|
||||||
// FIXME: Get the raw text from the input directly.
|
// FIXME: Get the raw text from the input directly.
|
||||||
rawText: rawText
|
rawText: rawText
|
||||||
};
|
};
|
||||||
})(result0[1], result0[2], result0[4]);
|
})(pos0, result0[1], result0[2], result0[4]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2425,7 +2425,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(begin, end) {
|
result0 = (function(offset, begin, end) {
|
||||||
if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) {
|
if (begin.data.charCodeAt(0) > end.data.charCodeAt(0)) {
|
||||||
throw new this.SyntaxError(
|
throw new this.SyntaxError(
|
||||||
"Invalid character range: " + begin.rawText + "-" + end.rawText + "."
|
"Invalid character range: " + begin.rawText + "-" + end.rawText + "."
|
||||||
|
@ -2437,7 +2437,7 @@ PEG.parser = (function(){
|
||||||
// FIXME: Get the raw text from the input directly.
|
// FIXME: Get the raw text from the input directly.
|
||||||
rawText: begin.rawText + "-" + end.rawText
|
rawText: begin.rawText + "-" + end.rawText
|
||||||
};
|
};
|
||||||
})(result0[0], result0[2]);
|
})(pos0, result0[0], result0[2]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2464,13 +2464,13 @@ PEG.parser = (function(){
|
||||||
pos0 = pos;
|
pos0 = pos;
|
||||||
result0 = parse_bracketDelimitedCharacter();
|
result0 = parse_bracketDelimitedCharacter();
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(char_) {
|
result0 = (function(offset, char_) {
|
||||||
return {
|
return {
|
||||||
data: char_,
|
data: char_,
|
||||||
// FIXME: Get the raw text from the input directly.
|
// FIXME: Get the raw text from the input directly.
|
||||||
rawText: quoteForRegexpClass(char_)
|
rawText: quoteForRegexpClass(char_)
|
||||||
};
|
};
|
||||||
})(result0);
|
})(pos0, result0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2583,7 +2583,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(char_) { return char_; })(result0[1]);
|
result0 = (function(offset, char_) { return char_; })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2679,7 +2679,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(char_) {
|
result0 = (function(offset, char_) {
|
||||||
return char_
|
return char_
|
||||||
.replace("b", "\b")
|
.replace("b", "\b")
|
||||||
.replace("f", "\f")
|
.replace("f", "\f")
|
||||||
|
@ -2687,7 +2687,7 @@ PEG.parser = (function(){
|
||||||
.replace("r", "\r")
|
.replace("r", "\r")
|
||||||
.replace("t", "\t")
|
.replace("t", "\t")
|
||||||
.replace("v", "\x0B"); // IE does not recognize "\v".
|
.replace("v", "\x0B"); // IE does not recognize "\v".
|
||||||
})(result0[2]);
|
})(pos0, result0[2]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2744,7 +2744,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function() { return "\x00"; })();
|
result0 = (function(offset) { return "\x00"; })(pos0);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2798,9 +2798,9 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(h1, h2) {
|
result0 = (function(offset, h1, h2) {
|
||||||
return String.fromCharCode(parseInt(h1 + h2, 16));
|
return String.fromCharCode(parseInt(h1 + h2, 16));
|
||||||
})(result0[1], result0[2]);
|
})(pos0, result0[1], result0[2]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2866,9 +2866,9 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(h1, h2, h3, h4) {
|
result0 = (function(offset, h1, h2, h3, h4) {
|
||||||
return String.fromCharCode(parseInt(h1 + h2 + h3 + h4, 16));
|
return String.fromCharCode(parseInt(h1 + h2 + h3 + h4, 16));
|
||||||
})(result0[1], result0[2], result0[3], result0[4]);
|
})(pos0, result0[1], result0[2], result0[3], result0[4]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
@ -2916,7 +2916,7 @@ PEG.parser = (function(){
|
||||||
pos = pos1;
|
pos = pos1;
|
||||||
}
|
}
|
||||||
if (result0 !== null) {
|
if (result0 !== null) {
|
||||||
result0 = (function(eol) { return eol; })(result0[1]);
|
result0 = (function(offset, eol) { return eol; })(pos0, result0[1]);
|
||||||
}
|
}
|
||||||
if (result0 === null) {
|
if (result0 === null) {
|
||||||
pos = pos0;
|
pos = pos0;
|
||||||
|
|
|
@ -70,36 +70,50 @@ test("semantic and", function() {
|
||||||
doesNotParse(rejectingParser, "ab");
|
doesNotParse(rejectingParser, "ab");
|
||||||
|
|
||||||
var singleElementUnlabeledParser = PEG.buildParser(
|
var singleElementUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" &{ return arguments.length === 0; }'
|
'start = "a" &{ return arguments.length === 1 && offset === 1; }'
|
||||||
);
|
);
|
||||||
parses(singleElementUnlabeledParser, "a", ["a", ""]);
|
parses(singleElementUnlabeledParser, "a", ["a", ""]);
|
||||||
|
|
||||||
var singleElementLabeledParser = PEG.buildParser(
|
var singleElementLabeledParser = PEG.buildParser([
|
||||||
'start = a:"a" &{ return arguments.length === 1 && a === "a"; }'
|
'start = a:"a" &{',
|
||||||
);
|
' return arguments.length === 2',
|
||||||
|
' && offset === 1',
|
||||||
|
' && a === "a";',
|
||||||
|
' }'
|
||||||
|
].join("\n"));
|
||||||
parses(singleElementLabeledParser, "a", ["a", ""]);
|
parses(singleElementLabeledParser, "a", ["a", ""]);
|
||||||
|
|
||||||
var multiElementUnlabeledParser = PEG.buildParser(
|
var multiElementUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" "b" "c" &{ return arguments.length === 0; }'
|
'start = "a" "b" "c" &{ return arguments.length === 1 && offset === 3; }'
|
||||||
);
|
);
|
||||||
parses(multiElementUnlabeledParser, "abc", ["a", "b", "c", ""]);
|
parses(multiElementUnlabeledParser, "abc", ["a", "b", "c", ""]);
|
||||||
|
|
||||||
var multiElementLabeledParser = PEG.buildParser([
|
var multiElementLabeledParser = PEG.buildParser([
|
||||||
'start = a:"a" "b" c:"c"',
|
'start = a:"a" "b" c:"c" &{',
|
||||||
' &{ return arguments.length === 2 && a === "a" && c === "c"; }'
|
' return arguments.length === 3',
|
||||||
|
' && offset === 3',
|
||||||
|
' && a === "a"',
|
||||||
|
' && c === "c";',
|
||||||
|
' }'
|
||||||
].join("\n"));
|
].join("\n"));
|
||||||
parses(multiElementLabeledParser, "abc", ["a", "b", "c", ""]);
|
parses(multiElementLabeledParser, "abc", ["a", "b", "c", ""]);
|
||||||
|
|
||||||
var innerElementsUnlabeledParser = PEG.buildParser(
|
var innerElementsUnlabeledParser = PEG.buildParser([
|
||||||
'start = "a" ("b" "c" "d" &{ return arguments.length === 0; }) "e"'
|
'start = "a"',
|
||||||
);
|
' ("b" "c" "d" &{ return arguments.length === 1 && offset === 4; })',
|
||||||
|
' "e"'
|
||||||
|
].join("\n"));
|
||||||
parses(innerElementsUnlabeledParser, "abcde", ["a", ["b", "c", "d", ""], "e"]);
|
parses(innerElementsUnlabeledParser, "abcde", ["a", ["b", "c", "d", ""], "e"]);
|
||||||
|
|
||||||
var innerElementsLabeledParser = PEG.buildParser([
|
var innerElementsLabeledParser = PEG.buildParser([
|
||||||
'start = "a"',
|
'start = "a"',
|
||||||
' (',
|
' (',
|
||||||
' b:"b" "c" d:"d"',
|
' b:"b" "c" d:"d" &{',
|
||||||
' &{ return arguments.length === 2 && b === "b" && d === "d"; }',
|
' return arguments.length === 3',
|
||||||
|
' && offset === 4',
|
||||||
|
' && b === "b"',
|
||||||
|
' && d === "d";',
|
||||||
|
' }',
|
||||||
' )',
|
' )',
|
||||||
' "e"'
|
' "e"'
|
||||||
].join("\n"));
|
].join("\n"));
|
||||||
|
@ -114,36 +128,50 @@ test("semantic not", function() {
|
||||||
doesNotParse(rejectingParser, "ab");
|
doesNotParse(rejectingParser, "ab");
|
||||||
|
|
||||||
var singleElementUnlabeledParser = PEG.buildParser(
|
var singleElementUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" !{ return arguments.length !== 0; }'
|
'start = "a" !{ return arguments.length !== 1 || offset !== 1; }'
|
||||||
);
|
);
|
||||||
parses(singleElementUnlabeledParser, "a", ["a", ""]);
|
parses(singleElementUnlabeledParser, "a", ["a", ""]);
|
||||||
|
|
||||||
var singleElementLabeledParser = PEG.buildParser(
|
var singleElementLabeledParser = PEG.buildParser([
|
||||||
'start = a:"a" !{ return arguments.length !== 1 || a !== "a"; }'
|
'start = a:"a" !{',
|
||||||
);
|
' return arguments.length !== 2',
|
||||||
|
' || offset !== 1',
|
||||||
|
' || a !== "a";',
|
||||||
|
' }'
|
||||||
|
].join("\n"));
|
||||||
parses(singleElementLabeledParser, "a", ["a", ""]);
|
parses(singleElementLabeledParser, "a", ["a", ""]);
|
||||||
|
|
||||||
var multiElementUnlabeledParser = PEG.buildParser(
|
var multiElementUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" "b" "c" !{ return arguments.length !== 0; }'
|
'start = "a" "b" "c" !{ return arguments.length !== 1 || offset !== 3; }'
|
||||||
);
|
);
|
||||||
parses(multiElementUnlabeledParser, "abc", ["a", "b", "c", ""]);
|
parses(multiElementUnlabeledParser, "abc", ["a", "b", "c", ""]);
|
||||||
|
|
||||||
var multiElementLabeledParser = PEG.buildParser([
|
var multiElementLabeledParser = PEG.buildParser([
|
||||||
'start = a:"a" "b" c:"c"',
|
'start = a:"a" "b" c:"c" !{',
|
||||||
' !{ return arguments.length !== 2 || a !== "a" || c !== "c"; }'
|
' return arguments.length !== 3',
|
||||||
|
' || offset !== 3',
|
||||||
|
' || a !== "a"',
|
||||||
|
' || c !== "c";',
|
||||||
|
' }'
|
||||||
].join("\n"));
|
].join("\n"));
|
||||||
parses(multiElementLabeledParser, "abc", ["a", "b", "c", ""]);
|
parses(multiElementLabeledParser, "abc", ["a", "b", "c", ""]);
|
||||||
|
|
||||||
var innerElementsUnlabeledParser = PEG.buildParser(
|
var innerElementsUnlabeledParser = PEG.buildParser([
|
||||||
'start = "a" ("b" "c" "d" !{ return arguments.length !== 0; }) "e"'
|
'start = "a"',
|
||||||
);
|
' ("b" "c" "d" !{ return arguments.length !== 1 || offset !== 4; })',
|
||||||
|
' "e"'
|
||||||
|
].join("\n"));
|
||||||
parses(innerElementsUnlabeledParser, "abcde", ["a", ["b", "c", "d", ""], "e"]);
|
parses(innerElementsUnlabeledParser, "abcde", ["a", ["b", "c", "d", ""], "e"]);
|
||||||
|
|
||||||
var innerElementsLabeledParser = PEG.buildParser([
|
var innerElementsLabeledParser = PEG.buildParser([
|
||||||
'start = "a"',
|
'start = "a"',
|
||||||
' (',
|
' (',
|
||||||
' b:"b" "c" d:"d"',
|
' b:"b" "c" d:"d" !{',
|
||||||
' !{ return arguments.length !== 2 || b !== "b" || d !== "d"; }',
|
' return arguments.length !== 3',
|
||||||
|
' || offset !== 4',
|
||||||
|
' || b !== "b"',
|
||||||
|
' || d !== "d";',
|
||||||
|
' }',
|
||||||
' )',
|
' )',
|
||||||
' "e"'
|
' "e"'
|
||||||
].join("\n"));
|
].join("\n"));
|
||||||
|
@ -174,32 +202,34 @@ test("actions", function() {
|
||||||
var singleElementUnlabeledParser = PEG.buildParser(
|
var singleElementUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" { return arguments.length; }'
|
'start = "a" { return arguments.length; }'
|
||||||
);
|
);
|
||||||
parses(singleElementUnlabeledParser, "a", 0);
|
parses(singleElementUnlabeledParser, "a", 1);
|
||||||
|
|
||||||
var singleElementLabeledParser = PEG.buildParser(
|
var singleElementLabeledParser = PEG.buildParser(
|
||||||
'start = a:"a" { return [arguments.length, a]; }'
|
'start = a:"a" { return [arguments.length, offset, a]; }'
|
||||||
);
|
);
|
||||||
parses(singleElementLabeledParser, "a", [1, "a"]);
|
parses(singleElementLabeledParser, "a", [2, 0, "a"]);
|
||||||
|
|
||||||
var multiElementUnlabeledParser = PEG.buildParser(
|
var multiElementUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" "b" "c" { return arguments.length; }'
|
'start = "a" "b" "c" { return arguments.length; }'
|
||||||
);
|
);
|
||||||
parses(multiElementUnlabeledParser, "abc", 0);
|
parses(multiElementUnlabeledParser, "abc", 1);
|
||||||
|
|
||||||
var multiElementLabeledParser = PEG.buildParser(
|
var multiElementLabeledParser = PEG.buildParser(
|
||||||
'start = a:"a" "b" c:"c" { return [arguments.length, a, c]; }'
|
'start = a:"a" "b" c:"c" { return [arguments.length, offset, a, c]; }'
|
||||||
);
|
);
|
||||||
parses(multiElementLabeledParser, "abc", [2, "a", "c"]);
|
parses(multiElementLabeledParser, "abc", [3, 0, "a", "c"]);
|
||||||
|
|
||||||
var innerElementsUnlabeledParser = PEG.buildParser(
|
var innerElementsUnlabeledParser = PEG.buildParser(
|
||||||
'start = "a" ("b" "c" "d" { return arguments.length; }) "e"'
|
'start = "a" ("b" "c" "d" { return arguments.length; }) "e"'
|
||||||
);
|
);
|
||||||
parses(innerElementsUnlabeledParser, "abcde", ["a", 0, "e"]);
|
parses(innerElementsUnlabeledParser, "abcde", ["a", 1, "e"]);
|
||||||
|
|
||||||
var innerElementsLabeledParser = PEG.buildParser(
|
var innerElementsLabeledParser = PEG.buildParser([
|
||||||
'start = "a" (b:"b" "c" d:"d" { return [arguments.length, b, d]; }) "e"'
|
'start = "a"',
|
||||||
);
|
' (b:"b" "c" d:"d" { return [arguments.length, offset, b, d]; })',
|
||||||
parses(innerElementsLabeledParser, "abcde", ["a", [2, "b", "d"], "e"]);
|
' "e"'
|
||||||
|
].join("\n"));
|
||||||
|
parses(innerElementsLabeledParser, "abcde", ["a", [3, 1, "b", "d"], "e"]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test that the parsing position returns after successfull parsing of the
|
* Test that the parsing position returns after successfull parsing of the
|
||||||
|
|
Loading…
Reference in a new issue