Skip to content

Instantly share code, notes, and snippets.

@ganeshv
Last active August 29, 2015 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ganeshv/62b59e9d0a4ab2192129 to your computer and use it in GitHub Desktop.
Save ganeshv/62b59e9d0a4ab2192129 to your computer and use it in GitHub Desktop.
Pre-compiled parser for pigshell
parser = (function(){
/*
* Generated by PEG.js 0.7.0.
*
* http://pegjs.majda.cz/
*/
function subclass(child, parent) {
function ctor() { this.constructor = child; }
ctor.prototype = parent.prototype;
child.prototype = new ctor();
}
function quote(s) {
/*
* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a
* string literal except for the closing quote character, backslash,
* carriage return, line separator, paragraph separator, and line feed.
* Any character may appear in the form of an escape sequence.
*
* For portability, we also escape escape all control and non-ASCII
* characters. Note that "\0" and "\v" escape sequences are not used
* because JSHint does not like the first and IE the second.
*/
return '"' + s
.replace(/\\/g, '\\\\') // backslash
.replace(/"/g, '\\"') // closing quote character
.replace(/\x08/g, '\\b') // backspace
.replace(/\t/g, '\\t') // horizontal tab
.replace(/\n/g, '\\n') // line feed
.replace(/\f/g, '\\f') // form feed
.replace(/\r/g, '\\r') // carriage return
.replace(/[\x00-\x07\x0B\x0E-\x1F\x80-\uFFFF]/g, escape)
+ '"';
}
var result = {
/*
* Parses the input with a generated parser. If the parsing is successful,
* returns a value explicitly or implicitly specified by the grammar from
* which the parser was generated (see |PEG.buildParser|). If the parsing is
* unsuccessful, throws |PEG.parser.SyntaxError| describing the error.
*/
parse: function(input) {
var parseFunctions = {
"start": parse_start,
"TokenList": parse_TokenList
};
var options = arguments.length > 1 ? arguments[1] : {},
startRule;
var depth = 0,
tabspace = options.tabspace || 2;
if (options.startRule !== undefined) {
startRule = options.startRule;
if (parseFunctions[startRule] === undefined) {
throw new Error("Can't start parsing from rule " + quote(startRule) + ".");
}
} else {
startRule = "start";
}
var pos = 0;
var reportFailures = 0;
var rightmostFailuresPos = 0;
var rightmostFailuresExpected = [];
function padLeft(input, padding, length) {
var result = input;
var padLength = length - input.length;
for (var i = 0; i < padLength; i++) {
result = padding + result;
}
return result;
}
function escape(ch) {
var charCode = ch.charCodeAt(0);
var escapeChar;
var length;
if (charCode <= 0xFF) {
escapeChar = 'x';
length = 2;
} else {
escapeChar = 'u';
length = 4;
}
return '\\' + escapeChar + padLeft(charCode.toString(16).toUpperCase(), '0', length);
}
function matchFailed(failure) {
if (pos < rightmostFailuresPos) {
return;
}
if (pos > rightmostFailuresPos) {
rightmostFailuresPos = pos;
rightmostFailuresExpected = [];
}
rightmostFailuresExpected.push(failure);
}
function parse_start() {
depth++;
var r0, r1, r2, r3, r4, r5, r6;
r1 = pos;
r2 = pos;
r3 = parse____();
if (r3 !== null) {
r4 = parse_Program();
if (r4 !== null) {
r5 = parse____();
if (r5 !== null) {
r6 = parse_EOF();
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, program) { return program; })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Program() {
depth++;
var r0, r1, r2, r3, r4, r5;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_BlockList();
r3 = r3 !== null ? r3 : "";
if (r3 !== null) {
r4 = [];
r5 = parse_EOS();
while (r5 !== null) {
r4.push(r5);
r5 = parse_EOS();
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, elements) {
return elements;
})(r1, r3);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Program");
}
depth--;
return r0;
}
function parse_BlockList() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_Function();
if (r3 === null) {
r3 = parse_StatementBlock();
}
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse_EOS();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r9 = parse_Function();
if (r9 === null) {
r9 = parse_StatementBlock();
}
if (r9 !== null) {
r5 = [r7, r8, r9];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse_EOS();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r9 = parse_Function();
if (r9 === null) {
r9 = parse_StatementBlock();
}
if (r9 !== null) {
r5 = [r7, r8, r9];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = head;
for (var i = 0; i < tail.length; i++) {
result = result.concat(tail[i][2]);
}
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("BlockList");
}
depth--;
return r0;
}
function parse_Function() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 8) === "function") {
r3 = "function";
pos += 8;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"function\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_Identifier();
if (r5 !== null) {
r6 = parse____();
if (r6 !== null) {
if (input.charCodeAt(pos) === 123) {
r7 = "{";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"{\"");
}
}
if (r7 !== null) {
r8 = parse____();
if (r8 !== null) {
r9 = parse_StatementBlock();
r9 = r9 !== null ? r9 : "";
if (r9 !== null) {
r10 = parse_EOS();
if (r10 !== null) {
r11 = parse__();
if (r11 !== null) {
if (input.charCodeAt(pos) === 125) {
r12 = "}";
pos++;
} else {
r12 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r12 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, fname, body) {
return [{'FUNCTION': [fname, body]}];
})(r1, r5, r9);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.substr(pos, 8) === "function") {
r3 = "function";
pos += 8;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"function\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_Identifier();
if (r5 !== null) {
r6 = parse____();
if (r6 !== null) {
if (input.charCodeAt(pos) === 123) {
r7 = "{";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"{\"");
}
}
if (r7 !== null) {
r8 = parse____();
if (r8 !== null) {
if (input.charCodeAt(pos) === 125) {
r9 = "}";
pos++;
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r9 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, fname) {
return [{'FUNCTION': [fname, []]}];
})(r1, r5);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.substr(pos, 8) === "function") {
r3 = "function";
pos += 8;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"function\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_Identifier();
if (r5 !== null) {
r7 = pos;
reportFailures++;
r6 = parse_EOS();
if (r6 === null) {
r6 = parse_EOF();
}
reportFailures--;
if (r6 !== null) {
r6 = "";
pos = r7;
} else {
r6 = null;
}
if (r6 !== null) {
r0 = [r3, r4, r5, r6];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, fname) {
return [{'FUNCTION': [fname, null]}];
})(r1, r5);
}
if (r0 === null) {
pos = r1;
}
}
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Function");
}
depth--;
return r0;
}
function parse_StatementBlock() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_Statement();
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse_EOS();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r9 = parse_Statement();
if (r9 !== null) {
r5 = [r7, r8, r9];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse_EOS();
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
r9 = parse_Statement();
if (r9 !== null) {
r5 = [r7, r8, r9];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = [head];
for (var i = 0; i < tail.length; i++) {
result.push(tail[i][2]);
}
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("StatementBlock");
}
depth--;
return r0;
}
function parse_Statement() {
depth++;
var r0, r1;
reportFailures++;
r1 = pos;
r0 = parse_WhileStatement();
if (r0 === null) {
r0 = parse_ForStatement();
if (r0 === null) {
r0 = parse_IfStatement();
if (r0 === null) {
r0 = parse_AssignStatement();
if (r0 === null) {
r0 = parse_ReturnStatement();
if (r0 === null) {
r0 = parse_OrStatement();
if (r0 === null) {
r0 = parse_EmptyStatement();
}
}
}
}
}
}
if (r0 !== null) {
r0 = (function(offset, statement) { return statement; })(r1, r0);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Statement");
}
depth--;
return r0;
}
function parse_WhileStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 5) === "while") {
r3 = "while";
pos += 5;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"while\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_OrStatement();
if (r5 !== null) {
r7 = parse_EOS();
if (r7 !== null) {
r6 = [];
while (r7 !== null) {
r6.push(r7);
r7 = parse_EOS();
}
} else {
r6 = null;
}
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos, 2) === "do") {
r8 = "do";
pos += 2;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"do\"");
}
}
if (r8 !== null) {
r10 = pos;
r11 = parse_EOS();
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
r9 = [r11, r12];
} else {
r9 = null;
pos = r10;
}
} else {
r9 = null;
pos = r10;
}
if (r9 === null) {
r9 = parse___();
}
if (r9 !== null) {
r10 = parse_StatementBlock();
if (r10 !== null) {
r11 = parse_EOS();
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
if (input.substr(pos, 4) === "done") {
r13 = "done";
pos += 4;
} else {
r13 = null;
if (reportFailures === 0) {
matchFailed("\"done\"");
}
}
if (r13 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, cond, body) {
return {'WHILE': [cond, body]};
})(r1, r5, r10);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("WhileStatement");
}
depth--;
return r0;
}
function parse_ForStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 3) === "for") {
r3 = "for";
pos += 3;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"for\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r5 = parse_Identifier();
if (r5 !== null) {
r6 = parse___();
if (r6 !== null) {
if (input.substr(pos, 2) === "in") {
r7 = "in";
pos += 2;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"in\"");
}
}
if (r7 !== null) {
r8 = parse___();
if (r8 !== null) {
r9 = parse_Argword();
if (r9 !== null) {
r10 = [];
r12 = pos;
r13 = parse___();
if (r13 !== null) {
r14 = parse_Argword();
if (r14 !== null) {
r11 = [r13, r14];
} else {
r11 = null;
pos = r12;
}
} else {
r11 = null;
pos = r12;
}
while (r11 !== null) {
r10.push(r11);
r12 = pos;
r13 = parse___();
if (r13 !== null) {
r14 = parse_Argword();
if (r14 !== null) {
r11 = [r13, r14];
} else {
r11 = null;
pos = r12;
}
} else {
r11 = null;
pos = r12;
}
}
if (r10 !== null) {
r12 = parse_EOS();
if (r12 !== null) {
r11 = [];
while (r12 !== null) {
r11.push(r12);
r12 = parse_EOS();
}
} else {
r11 = null;
}
if (r11 !== null) {
r12 = parse__();
if (r12 !== null) {
if (input.substr(pos, 2) === "do") {
r13 = "do";
pos += 2;
} else {
r13 = null;
if (reportFailures === 0) {
matchFailed("\"do\"");
}
}
if (r13 !== null) {
r15 = pos;
r16 = parse_EOS();
if (r16 !== null) {
r17 = parse__();
if (r17 !== null) {
r14 = [r16, r17];
} else {
r14 = null;
pos = r15;
}
} else {
r14 = null;
pos = r15;
}
if (r14 === null) {
r14 = parse___();
}
if (r14 !== null) {
r15 = parse_StatementBlock();
if (r15 !== null) {
r16 = parse_EOS();
if (r16 !== null) {
r17 = parse__();
if (r17 !== null) {
if (input.substr(pos, 4) === "done") {
r18 = "done";
pos += 4;
} else {
r18 = null;
if (reportFailures === 0) {
matchFailed("\"done\"");
}
}
if (r18 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, id, head, tail, body) {
var args = [head];
for (var i = 0; i < tail.length; i++) {
args.push(tail[i][1]);
}
return {'FOR': [id, {'ARGLIST': args}, body]};
})(r1, r5, r9, r10, r15);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("ForStatement");
}
depth--;
return r0;
}
function parse_IfStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "if") {
r3 = "if";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"if\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r6 = pos;
if (input.charCodeAt(pos) === 33) {
r7 = "!";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"!\"");
}
}
if (r7 !== null) {
r8 = parse___();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_OrStatement();
if (r6 !== null) {
r8 = parse_EOS();
if (r8 !== null) {
r7 = [];
while (r8 !== null) {
r7.push(r8);
r8 = parse_EOS();
}
} else {
r7 = null;
}
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
if (input.substr(pos, 4) === "then") {
r9 = "then";
pos += 4;
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"then\"");
}
}
if (r9 !== null) {
r11 = pos;
r12 = parse_EOS();
if (r12 !== null) {
r13 = parse__();
if (r13 !== null) {
r10 = [r12, r13];
} else {
r10 = null;
pos = r11;
}
} else {
r10 = null;
pos = r11;
}
if (r10 === null) {
r10 = parse___();
}
if (r10 !== null) {
r11 = parse_StatementBlock();
if (r11 !== null) {
r12 = [];
r14 = pos;
r15 = parse_EOS();
if (r15 !== null) {
r16 = parse__();
if (r16 !== null) {
r17 = parse_ElifBlock();
if (r17 !== null) {
r13 = [r15, r16, r17];
} else {
r13 = null;
pos = r14;
}
} else {
r13 = null;
pos = r14;
}
} else {
r13 = null;
pos = r14;
}
while (r13 !== null) {
r12.push(r13);
r14 = pos;
r15 = parse_EOS();
if (r15 !== null) {
r16 = parse__();
if (r16 !== null) {
r17 = parse_ElifBlock();
if (r17 !== null) {
r13 = [r15, r16, r17];
} else {
r13 = null;
pos = r14;
}
} else {
r13 = null;
pos = r14;
}
} else {
r13 = null;
pos = r14;
}
}
if (r12 !== null) {
r13 = parse_EOS();
if (r13 !== null) {
r14 = parse__();
if (r14 !== null) {
r15 = parse_IfTail();
if (r15 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, ifnot, cond, body, elif, tail) {
var result = {},
ifblock = {},
op = (ifnot.length === 0) ? 'IF' : 'IFNOT',
ifblocks = [];
ifblocks.push([op, cond, body]);
for (var i = 0; i < elif.length; i++) {
ifblocks.push(elif[i][2]);
}
result['IF'] = [ifblocks, tail];
return result;
})(r1, r5, r6, r11, r12, r15);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("IfStatement");
}
depth--;
return r0;
}
function parse_ElifBlock() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 4) === "elif") {
r3 = "elif";
pos += 4;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"elif\"");
}
}
if (r3 !== null) {
r4 = parse___();
if (r4 !== null) {
r6 = pos;
if (input.charCodeAt(pos) === 33) {
r7 = "!";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"!\"");
}
}
if (r7 !== null) {
r8 = parse___();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse_OrStatement();
if (r6 !== null) {
r8 = parse_EOS();
if (r8 !== null) {
r7 = [];
while (r8 !== null) {
r7.push(r8);
r8 = parse_EOS();
}
} else {
r7 = null;
}
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
if (input.substr(pos, 4) === "then") {
r9 = "then";
pos += 4;
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"then\"");
}
}
if (r9 !== null) {
r11 = pos;
r12 = parse_EOS();
if (r12 !== null) {
r13 = parse__();
if (r13 !== null) {
r10 = [r12, r13];
} else {
r10 = null;
pos = r11;
}
} else {
r10 = null;
pos = r11;
}
if (r10 === null) {
r10 = parse___();
}
if (r10 !== null) {
r11 = parse_StatementBlock();
if (r11 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9, r10, r11];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, ifnot, cond, body) {
var result;
op = (ifnot.length === 0) ? 'IF' : 'IFNOT';
result = [op, cond, body];
return result;
})(r1, r5, r6, r11);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("ElifBlock");
}
depth--;
return r0;
}
function parse_IfTail() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 4) === "else") {
r3 = "else";
pos += 4;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"else\"");
}
}
if (r3 !== null) {
r5 = pos;
r6 = parse_EOS();
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
if (r4 === null) {
r4 = parse___();
}
if (r4 !== null) {
r5 = parse_StatementBlock();
if (r5 !== null) {
r6 = parse_EOS();
if (r6 !== null) {
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos, 2) === "fi") {
r8 = "fi";
pos += 2;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"fi\"");
}
}
if (r8 !== null) {
r0 = [r3, r4, r5, r6, r7, r8];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, elseblock) { return elseblock; })(r1, r5);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "fi") {
r0 = "fi";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"fi\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return [];})(r1);
}
if (r0 === null) {
pos = r1;
}
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("IfTail");
}
depth--;
return r0;
}
function parse_AssignStatement() {
depth++;
var r0, r1, r2, r3, r4, r5;
r1 = pos;
r2 = pos;
r3 = parse_Identifier();
if (r3 !== null) {
if (input.charCodeAt(pos) === 61) {
r4 = "=";
pos++;
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"=\"");
}
}
if (r4 !== null) {
r5 = parse_Argword();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, id, arg) {
var result = {'ASSIGN': {}};
result['ASSIGN'][id] = arg;
return result;
})(r1, r3, r5);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_ReturnStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = pos;
r2 = pos;
if (input.substr(pos, 6) === "return") {
r3 = "return";
pos += 6;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"return\"");
}
}
if (r3 !== null) {
r5 = pos;
r6 = parse___();
if (r6 !== null) {
r7 = parse_Argword();
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, arg) {
var retval = (arg.length === 0) ? '' : arg[1],
result = {'RETURN': retval};
return result;
})(r1, r4);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_OrStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_AndStatement();
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos, 2) === "||") {
r8 = "||";
pos += 2;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"||\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_AndStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos, 2) === "||") {
r8 = "||";
pos += 2;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"||\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_AndStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = head;
for (var i = 0; i < tail.length; i++) {
result = {'OR': [result, tail[i][3]]};
}
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("OrStatement");
}
depth--;
return r0;
}
function parse_AndStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_SimpleStatement();
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos, 2) === "&&") {
r8 = "&&";
pos += 2;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"&&\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_SimpleStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse__();
if (r7 !== null) {
if (input.substr(pos, 2) === "&&") {
r8 = "&&";
pos += 2;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"&&\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_SimpleStatement();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = head;
for (var i = 0; i < tail.length; i++) {
result = {'AND': [result, tail[i][3]]};
}
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("AndStatement");
}
depth--;
return r0;
}
function parse_SimpleStatement() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_PipeCommand();
if (r3 === null) {
r3 = parse_SimpleCommand();
}
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse__();
if (r7 !== null) {
r8 = parse_Redir();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse__();
if (r7 !== null) {
r8 = parse_Redir();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
if (tail.length === 0) {
return head;
}
var redir = [];
for (var i = 0; i < tail.length; i++) {
redir.push(tail[i][1]);
}
head['TAIL'] = redir;
return head;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("SimpleStatement");
}
depth--;
return r0;
}
function parse_EmptyStatement() {
depth++;
var r0, r1, r2;
reportFailures++;
r1 = pos;
r2 = pos;
reportFailures++;
r0 = parse_EOS();
reportFailures--;
if (r0 !== null) {
r0 = "";
pos = r2;
} else {
r0 = null;
}
if (r0 !== null) {
r0 = (function(offset) {return '';})(r1);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("EmptyStatement");
}
depth--;
return r0;
}
function parse_Redir() {
depth++;
var r0, r1, r2, r3, r4, r5;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === ">>") {
r3 = ">>";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\">>\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Argword();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, arg) { return {'REDIRAPPEND': arg}; })(r1, r5);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 62) {
r3 = ">";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\">\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Argword();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, arg) { return {'REDIROUT': arg}; })(r1, r5);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "2>") {
r3 = "2>";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"2>\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Argword();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, arg) { return {'REDIR2OUT': arg}; })(r1, r5);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.substr(pos, 3) === "2>>") {
r3 = "2>>";
pos += 3;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"2>>\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Argword();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, arg) { return {'REDIR2APPEND': arg}; })(r1, r5);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 60) {
r3 = "<";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"<\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Argword();
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, arg) { return {'REDIRIN': arg}; })(r1, r5);
}
if (r0 === null) {
pos = r1;
}
}
}
}
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Redir");
}
depth--;
return r0;
}
function parse_PipeCommand() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_SimpleCommand();
if (r3 !== null) {
r6 = pos;
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos) === 124) {
r8 = "|";
pos++;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"|\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_SimpleCommand();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse__();
if (r7 !== null) {
if (input.charCodeAt(pos) === 124) {
r8 = "|";
pos++;
} else {
r8 = null;
if (reportFailures === 0) {
matchFailed("\"|\"");
}
}
if (r8 !== null) {
r9 = parse__();
if (r9 !== null) {
r10 = parse_SimpleCommand();
if (r10 !== null) {
r5 = [r7, r8, r9, r10];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
} else {
r4 = null;
}
if (r4 !== null) {
r6 = pos;
reportFailures++;
r5 = parse_EOCP();
reportFailures--;
if (r5 !== null) {
r5 = "";
pos = r6;
} else {
r5 = null;
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = [head];
for (var i = 0; i < tail.length; i++) {
result.push(tail[i][3]);
}
return {'PIPE': result};
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("PipeCommand");
}
depth--;
return r0;
}
function parse_SimpleCommand() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
reportFailures++;
r1 = pos;
r2 = pos;
r3 = parse_Command();
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse___();
if (r7 !== null) {
r8 = parse_Argword();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse___();
if (r7 !== null) {
r8 = parse_Argword();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r6 = pos;
reportFailures++;
r5 = parse_EOC();
reportFailures--;
if (r5 !== null) {
r5 = "";
pos = r6;
} else {
r5 = null;
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = [head];
for (var i = 0; i < tail.length; i++) {
result.push(tail[i][1]);
}
return {'ARGLIST': result};
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("SimpleCommand");
}
depth--;
return r0;
}
function parse_Command() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = pos;
r2 = pos;
r4 = pos;
reportFailures++;
r5 = pos;
r6 = parse_Keyword();
if (r6 !== null) {
r7 = parse_EOC();
if (r7 !== null) {
r3 = [r6, r7];
} else {
r3 = null;
pos = r5;
}
} else {
r3 = null;
pos = r5;
}
if (r3 === null) {
if (input.charCodeAt(pos) === 125) {
r3 = "}";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
}
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = r4;
}
if (r3 !== null) {
r4 = parse_Argword();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, cmd) { return cmd;})(r1, r4);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Identifier() {
depth++;
var r0, r1, r2, r3, r4, r5;
reportFailures++;
r1 = pos;
r2 = pos;
if (/^[a-zA-Z_]/.test(input.charAt(pos))) {
r3 = input.charAt(pos);
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("[a-zA-Z_]");
}
}
if (r3 !== null) {
r4 = [];
if (/^[a-zA-Z0-9_]/.test(input.charAt(pos))) {
r5 = input.charAt(pos);
pos++;
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[a-zA-Z0-9_]");
}
}
while (r5 !== null) {
r4.push(r5);
if (/^[a-zA-Z0-9_]/.test(input.charAt(pos))) {
r5 = input.charAt(pos);
pos++;
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("[a-zA-Z0-9_]");
}
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = head + tail.join("");
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Identifier");
}
depth--;
return r0;
}
function parse_TokenList() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10;
r1 = pos;
r2 = pos;
r3 = parse__();
if (r3 !== null) {
r4 = parse_Argword();
if (r4 !== null) {
r5 = parse__();
if (r5 !== null) {
r6 = [];
r8 = pos;
r9 = parse_Argword();
if (r9 === null) {
r9 = parse_SimpleCmdSep();
if (r9 === null) {
if (input.substr(pos, 2) === "$(") {
r9 = "$(";
pos += 2;
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"$(\"");
}
}
}
}
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r7 = [r9, r10];
} else {
r7 = null;
pos = r8;
}
} else {
r7 = null;
pos = r8;
}
while (r7 !== null) {
r6.push(r7);
r8 = pos;
r9 = parse_Argword();
if (r9 === null) {
r9 = parse_SimpleCmdSep();
if (r9 === null) {
if (input.substr(pos, 2) === "$(") {
r9 = "$(";
pos += 2;
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\"$(\"");
}
}
}
}
if (r9 !== null) {
r10 = parse__();
if (r10 !== null) {
r7 = [r9, r10];
} else {
r7 = null;
pos = r8;
}
} else {
r7 = null;
pos = r8;
}
}
if (r6 !== null) {
r7 = [];
r8 = parse_WhiteSpace();
if (r8 === null) {
r8 = parse_LineTerminator();
}
while (r8 !== null) {
r7.push(r8);
r8 = parse_WhiteSpace();
if (r8 === null) {
r8 = parse_LineTerminator();
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = [head];
for (var i = 0; i < tail.length; i++) {
result.push(tail[i][0]);
}
return result;
})(r1, r4, r6);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Argwordlist() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = pos;
r2 = pos;
r3 = parse_Argword();
if (r3 !== null) {
r4 = [];
r6 = pos;
r7 = parse___();
if (r7 !== null) {
r8 = parse_Argword();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
while (r5 !== null) {
r4.push(r5);
r6 = pos;
r7 = parse___();
if (r7 !== null) {
r8 = parse_Argword();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = [head];
for (var i = 0; i < tail.length; i++) {
result.push(tail[i][1]);
}
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Argword() {
depth++;
var r0;
reportFailures++;
r0 = parse_Concat();
if (r0 === null) {
r0 = parse_Argword2();
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Argword");
}
depth--;
return r0;
}
function parse_Argword2() {
depth++;
var r0, r1;
reportFailures++;
r1 = pos;
r0 = parse_Deferred();
if (r0 === null) {
r0 = parse_Backquote();
if (r0 === null) {
r0 = parse_Varlen();
if (r0 === null) {
r0 = parse_Varjoin();
if (r0 === null) {
r0 = parse_Varref();
if (r0 === null) {
r0 = parse_List();
if (r0 === null) {
r0 = parse_StringLiteral();
}
}
}
}
}
}
if (r0 !== null) {
r0 = (function(offset, arg) {
return arg;
})(r1, r0);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Argword2");
}
depth--;
return r0;
}
function parse_List() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 40) {
r3 = "(";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"(\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_Argwordlist();
r5 = r5 !== null ? r5 : "";
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos) === 41) {
r7 = ")";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, args) {
return {'LIST': args};
})(r1, r5);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_VarIdentifier() {
depth++;
var r0;
r0 = parse_Identifier();
if (r0 === null) {
if (input.charCodeAt(pos) === 63) {
r0 = "?";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"?\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos) === 42) {
r0 = "*";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"*\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos) === 33) {
r0 = "!";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"!\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos) === 35) {
r0 = "#";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r0 === null) {
r0 = parse_Number();
}
}
}
}
}
depth--;
return r0;
}
function parse_Varlen() {
depth++;
var r0, r1, r2, r3, r4;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "$#") {
r3 = "$#";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"$#\"");
}
}
if (r3 !== null) {
r4 = parse_VarIdentifier();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, id) {
return {'VARLEN': id};
})(r1, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Varlen");
}
depth--;
return r0;
}
function parse_Varjoin() {
depth++;
var r0, r1, r2, r3, r4;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "$\"") {
r3 = "$\"";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"$\\\"\"");
}
}
if (r3 !== null) {
r4 = parse_VarIdentifier();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, id) {
return {'VARJOIN': id};
})(r1, r4);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Varjoin");
}
depth--;
return r0;
}
function parse_Varref() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 36) {
r3 = "$";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"$\"");
}
}
if (r3 !== null) {
r4 = parse_VarIdentifier();
if (r4 !== null) {
if (input.charCodeAt(pos) === 40) {
r5 = "(";
pos++;
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"(\"");
}
}
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
r7 = parse_Argwordlist();
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse__();
if (r8 !== null) {
if (input.charCodeAt(pos) === 41) {
r9 = ")";
pos++;
} else {
r9 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r9 !== null) {
r0 = [r3, r4, r5, r6, r7, r8, r9];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, id, slist) {
return {'VARVAL': [id, slist]};
})(r1, r4, r7);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 36) {
r3 = "$";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"$\"");
}
}
if (r3 !== null) {
r4 = parse_VarIdentifier();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, id) {
return {'VARVAL': id}
})(r1, r4);
}
if (r0 === null) {
pos = r1;
}
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("Varref");
}
depth--;
return r0;
}
function parse_Number() {
depth++;
var r0, r1, r2;
r1 = pos;
if (/^[0-9]/.test(input.charAt(pos))) {
r2 = input.charAt(pos);
pos++;
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("[0-9]");
}
}
if (r2 !== null) {
r0 = [];
while (r2 !== null) {
r0.push(r2);
if (/^[0-9]/.test(input.charAt(pos))) {
r2 = input.charAt(pos);
pos++;
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("[0-9]");
}
}
}
} else {
r0 = null;
}
if (r0 !== null) {
r0 = (function(offset, num) { return num.join("");})(r1, r0);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Concat() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8;
r1 = pos;
r2 = pos;
r3 = parse_Argword2();
if (r3 !== null) {
r6 = pos;
if (input.charCodeAt(pos) === 94) {
r7 = "^";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"^\"");
}
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse_Argword2();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
if (r5 !== null) {
r4 = [];
while (r5 !== null) {
r4.push(r5);
r6 = pos;
if (input.charCodeAt(pos) === 94) {
r7 = "^";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"^\"");
}
}
r7 = r7 !== null ? r7 : "";
if (r7 !== null) {
r8 = parse_Argword2();
if (r8 !== null) {
r5 = [r7, r8];
} else {
r5 = null;
pos = r6;
}
} else {
r5 = null;
pos = r6;
}
}
} else {
r4 = null;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, head, tail) {
var result = head;
for (var i = 0; i < tail.length; i++) {
result = {"^": [result, tail[i][1]]};
}
return result;
})(r1, r3, r4);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Backquote() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "$(") {
r3 = "$(";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"$(\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_StatementBlock();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos) === 41) {
r7 = ")";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\")\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, cmds) {
return {'BACKQUOTE': cmds};
})(r1, r5);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_Deferred() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "${") {
r3 = "${";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"${\"");
}
}
if (r3 !== null) {
r4 = parse__();
if (r4 !== null) {
r5 = parse_StatementBlock();
if (r5 !== null) {
r6 = parse__();
if (r6 !== null) {
if (input.charCodeAt(pos) === 125) {
r7 = "}";
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("\"}\"");
}
}
if (r7 !== null) {
r0 = [r3, r4, r5, r6, r7];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, cmds) {
return {'DEFERRED': cmds};
})(r1, r5);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_StringLiteral() {
depth++;
var r0, r1, r2, r3, r4, r5;
reportFailures++;
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 34) {
r3 = "\"";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r3 !== null) {
r4 = parse_DoubleStringCharacters();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
if (input.charCodeAt(pos) === 34) {
r5 = "\"";
pos++;
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, parts) {
return {'DQUOTED_STRING': parts[1]};
})(r1, r0);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 39) {
r3 = "'";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r3 !== null) {
r4 = parse_SingleStringCharacters();
r4 = r4 !== null ? r4 : "";
if (r4 !== null) {
if (input.charCodeAt(pos) === 39) {
r5 = "'";
pos++;
} else {
r5 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r5 !== null) {
r0 = [r3, r4, r5];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, parts) {
return {'SQUOTED_STRING': parts[1]};
})(r1, r0);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r0 = parse_BareStringCharacters();
}
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("StringLiteral");
}
depth--;
return r0;
}
function parse_DoubleStringCharacters() {
depth++;
var r0, r1, r2;
r1 = pos;
r2 = parse_DoubleStringCharacter();
if (r2 !== null) {
r0 = [];
while (r2 !== null) {
r0.push(r2);
r2 = parse_DoubleStringCharacter();
}
} else {
r0 = null;
}
if (r0 !== null) {
r0 = (function(offset, chars) { return chars.join(""); })(r1, r0);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_SingleStringCharacters() {
depth++;
var r0, r1, r2;
r1 = pos;
r2 = parse_SingleStringCharacter();
if (r2 !== null) {
r0 = [];
while (r2 !== null) {
r0.push(r2);
r2 = parse_SingleStringCharacter();
}
} else {
r0 = null;
}
if (r0 !== null) {
r0 = (function(offset, chars) { return chars.join(""); })(r1, r0);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_DoubleStringCharacter() {
depth++;
var r0, r1, r2, r3, r4;
r1 = pos;
r2 = pos;
r4 = pos;
reportFailures++;
if (input.charCodeAt(pos) === 34) {
r3 = "\"";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r3 === null) {
if (input.charCodeAt(pos) === 92) {
r3 = "\\";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 === null) {
r3 = parse_LineTerminator();
}
}
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = r4;
}
if (r3 !== null) {
r4 = parse_SourceCharacter();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, char) { return char; })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r0 = parse_QuotedCharacter();
if (r0 !== null) {
r0 = (function(offset, qc) { return qc; })(r1, r0);
}
if (r0 === null) {
pos = r1;
}
}
depth--;
return r0;
}
function parse_SingleStringCharacter() {
depth++;
var r0, r1, r2, r3, r4;
r1 = pos;
r2 = pos;
r4 = pos;
reportFailures++;
if (input.charCodeAt(pos) === 39) {
r3 = "'";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r3 === null) {
if (input.charCodeAt(pos) === 92) {
r3 = "\\";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 === null) {
r3 = parse_LineTerminator();
}
}
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = r4;
}
if (r3 !== null) {
r4 = parse_SourceCharacter();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, char) { return char; })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r0 = parse_QuotedCharacter();
if (r0 !== null) {
r0 = (function(offset, qc) { return qc; })(r1, r0);
}
if (r0 === null) {
pos = r1;
}
}
depth--;
return r0;
}
function parse_QuotedCharacter() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
r1 = pos;
if (input.substr(pos, 2) === "\\0") {
r0 = "\\0";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\0\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\0"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "\\b") {
r0 = "\\b";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\b\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\b"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "\\t") {
r0 = "\\t";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\t\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\t"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "\\n") {
r0 = "\\n";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\n\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\n"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "\\v") {
r0 = "\\v";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\v\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\v"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "\\f") {
r0 = "\\f";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\f\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\f"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
if (input.substr(pos, 2) === "\\r") {
r0 = "\\r";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\r\"");
}
}
if (r0 !== null) {
r0 = (function(offset) { return "\r"; })(r1);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "\\x") {
r3 = "\\x";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\x\"");
}
}
if (r3 !== null) {
r5 = pos;
r6 = parse_HexDigit();
if (r6 !== null) {
r7 = parse_HexDigit();
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, sequence) { return String.fromCharCode(parseInt("0x" + sequence.join(''))); })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.substr(pos, 2) === "\\u") {
r3 = "\\u";
pos += 2;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\u\"");
}
}
if (r3 !== null) {
r5 = pos;
r6 = parse_HexDigit();
if (r6 !== null) {
r7 = parse_HexDigit();
if (r7 !== null) {
r8 = parse_HexDigit();
if (r8 !== null) {
r9 = parse_HexDigit();
if (r9 !== null) {
r4 = [r6, r7, r8, r9];
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, sequence) { return String.fromCharCode(parseInt("0x" + sequence.join(''))); })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 92) {
r3 = "\\";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
if (input.charCodeAt(pos) === 34) {
r4 = "\"";
pos++;
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r4 === null) {
if (input.charCodeAt(pos) === 39) {
r4 = "'";
pos++;
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
if (r4 === null) {
if (input.charCodeAt(pos) === 92) {
r4 = "\\";
pos++;
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r4 === null) {
r4 = parse_LineTerminator();
}
}
}
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, sequence) { return sequence; })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 92) {
r3 = "\\";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
r4 = parse_SourceCharacter();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, sequence) { return "\\" + sequence; })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
}
}
}
}
}
}
}
}
}
}
depth--;
return r0;
}
function parse_HexDigit() {
depth++;
var r0, r1;
r1 = pos;
if (/^[0-9a-fA-F]/.test(input.charAt(pos))) {
r0 = input.charAt(pos);
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[0-9a-fA-F]");
}
}
if (r0 !== null) {
r0 = (function(offset, num) { return num; })(r1, r0);
}
if (r0 === null) {
pos = r1;
}
depth--;
return r0;
}
function parse_BareStringCharacters() {
depth++;
var r0, r1, r2;
reportFailures++;
r1 = pos;
r2 = parse_BareStringCharacter();
if (r2 !== null) {
r0 = [];
while (r2 !== null) {
r0.push(r2);
r2 = parse_BareStringCharacter();
}
} else {
r0 = null;
}
if (r0 !== null) {
r0 = (function(offset, chars) {
return chars.join("");
})(r1, r0);
}
if (r0 === null) {
pos = r1;
}
reportFailures--;
if (reportFailures === 0 && r0 === null) {
matchFailed("BareString");
}
depth--;
return r0;
}
function parse_BareStringCharacter() {
depth++;
var r0, r1, r2, r3, r4;
r1 = pos;
r2 = pos;
r4 = pos;
reportFailures++;
r3 = parse_WhiteSpace();
if (r3 === null) {
r3 = parse_LineTerminator();
if (r3 === null) {
r3 = parse_SimpleCmdSep();
if (r3 === null) {
if (input.charCodeAt(pos) === 36) {
r3 = "$";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"$\"");
}
}
if (r3 === null) {
if (input.charCodeAt(pos) === 35) {
r3 = "#";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r3 === null) {
if (input.charCodeAt(pos) === 34) {
r3 = "\"";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\"\"");
}
}
if (r3 === null) {
if (input.charCodeAt(pos) === 92) {
r3 = "\\";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 === null) {
if (input.charCodeAt(pos) === 39) {
r3 = "'";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"'\"");
}
}
}
}
}
}
}
}
}
reportFailures--;
if (r3 === null) {
r3 = "";
} else {
r3 = null;
pos = r4;
}
if (r3 !== null) {
r4 = parse_SourceCharacter();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, char) { return char;})(r1, r4);
}
if (r0 === null) {
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = pos;
if (input.charCodeAt(pos) === 92) {
r3 = "\\";
pos++;
} else {
r3 = null;
if (reportFailures === 0) {
matchFailed("\"\\\\\"");
}
}
if (r3 !== null) {
r4 = parse_SourceCharacter();
if (r4 !== null) {
r0 = [r3, r4];
} else {
r0 = null;
pos = r2;
}
} else {
r0 = null;
pos = r2;
}
if (r0 !== null) {
r0 = (function(offset, sequence) { return sequence; })(r1, r4);
}
if (r0 === null) {
pos = r1;
}
}
depth--;
return r0;
}
function parse_PipeCmdSep() {
depth++;
var r0;
if (/^[|&><()^};]/.test(input.charAt(pos))) {
r0 = input.charAt(pos);
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[|&><()^};]");
}
}
if (r0 === null) {
if (input.substr(pos, 2) === "2>") {
r0 = "2>";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"2>\"");
}
}
if (r0 === null) {
if (input.substr(pos, 3) === "2>>") {
r0 = "2>>";
pos += 3;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"2>>\"");
}
}
}
}
depth--;
return r0;
}
function parse_SimpleCmdSep() {
depth++;
var r0;
r0 = parse_PipeCmdSep();
if (r0 === null) {
if (input.charCodeAt(pos) === 124) {
r0 = "|";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"|\"");
}
}
}
depth--;
return r0;
}
function parse_EOC() {
depth++;
var r0;
r0 = parse_SimpleCmdSep();
if (r0 === null) {
r0 = parse_WhiteSpace();
if (r0 === null) {
r0 = parse_LineTerminator();
if (r0 === null) {
r0 = parse_EOF();
}
}
}
depth--;
return r0;
}
function parse_EOCP() {
depth++;
var r0;
r0 = parse_PipeCmdSep();
if (r0 === null) {
r0 = parse_WhiteSpace();
if (r0 === null) {
r0 = parse_LineTerminator();
if (r0 === null) {
r0 = parse_EOF();
}
}
}
depth--;
return r0;
}
function parse_EOS() {
depth++;
var r0, r1, r2, r3, r4;
r1 = pos;
r2 = parse__();
if (r2 !== null) {
r3 = [];
r4 = parse_Comment();
while (r4 !== null) {
r3.push(r4);
r4 = parse_Comment();
}
if (r3 !== null) {
if (input.charCodeAt(pos) === 59) {
r4 = ";";
pos++;
} else {
r4 = null;
if (reportFailures === 0) {
matchFailed("\";\"");
}
}
if (r4 !== null) {
r0 = [r2, r3, r4];
} else {
r0 = null;
pos = r1;
}
} else {
r0 = null;
pos = r1;
}
} else {
r0 = null;
pos = r1;
}
if (r0 === null) {
r1 = pos;
r2 = parse__();
if (r2 !== null) {
r3 = [];
r4 = parse_Comment();
while (r4 !== null) {
r3.push(r4);
r4 = parse_Comment();
}
if (r3 !== null) {
r4 = parse_LineTerminatorSequence();
if (r4 !== null) {
r0 = [r2, r3, r4];
} else {
r0 = null;
pos = r1;
}
} else {
r0 = null;
pos = r1;
}
} else {
r0 = null;
pos = r1;
}
}
depth--;
return r0;
}
function parse____() {
depth++;
var r0, r1;
r0 = [];
r1 = parse_WhiteSpace();
if (r1 === null) {
r1 = parse_LineTerminatorSequence();
if (r1 === null) {
r1 = parse_Comment();
}
}
while (r1 !== null) {
r0.push(r1);
r1 = parse_WhiteSpace();
if (r1 === null) {
r1 = parse_LineTerminatorSequence();
if (r1 === null) {
r1 = parse_Comment();
}
}
}
depth--;
return r0;
}
function parse__() {
depth++;
var r0, r1;
r0 = [];
r1 = parse_WhiteSpace();
while (r1 !== null) {
r0.push(r1);
r1 = parse_WhiteSpace();
}
depth--;
return r0;
}
function parse___() {
depth++;
var r0, r1;
r1 = parse_WhiteSpace();
if (r1 !== null) {
r0 = [];
while (r1 !== null) {
r0.push(r1);
r1 = parse_WhiteSpace();
}
} else {
r0 = null;
}
depth--;
return r0;
}
function parse_LineTerminator() {
depth++;
var r0;
if (/^[\n\r]/.test(input.charAt(pos))) {
r0 = input.charAt(pos);
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[\\n\\r]");
}
}
depth--;
return r0;
}
function parse_LineTerminatorSequence() {
depth++;
var r0;
if (input.charCodeAt(pos) === 10) {
r0 = "\n";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\n\"");
}
}
if (r0 === null) {
if (input.substr(pos, 2) === "\r\n") {
r0 = "\r\n";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\r\\n\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos) === 13) {
r0 = "\r";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"\\r\"");
}
}
}
}
depth--;
return r0;
}
function parse_WhiteSpace() {
depth++;
var r0;
if (/^[\t\x0B\f ]/.test(input.charAt(pos))) {
r0 = input.charAt(pos);
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("[\\t\\x0B\\f ]");
}
}
depth--;
return r0;
}
function parse_Comment() {
depth++;
var r0, r1, r2, r3, r4, r5, r6, r7;
r1 = pos;
if (input.charCodeAt(pos) === 35) {
r2 = "#";
pos++;
} else {
r2 = null;
if (reportFailures === 0) {
matchFailed("\"#\"");
}
}
if (r2 !== null) {
r3 = [];
r5 = pos;
r7 = pos;
reportFailures++;
r6 = parse_LineTerminator();
reportFailures--;
if (r6 === null) {
r6 = "";
} else {
r6 = null;
pos = r7;
}
if (r6 !== null) {
if (input.length > pos) {
r7 = input.charAt(pos);
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
while (r4 !== null) {
r3.push(r4);
r5 = pos;
r7 = pos;
reportFailures++;
r6 = parse_LineTerminator();
reportFailures--;
if (r6 === null) {
r6 = "";
} else {
r6 = null;
pos = r7;
}
if (r6 !== null) {
if (input.length > pos) {
r7 = input.charAt(pos);
pos++;
} else {
r7 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
if (r7 !== null) {
r4 = [r6, r7];
} else {
r4 = null;
pos = r5;
}
} else {
r4 = null;
pos = r5;
}
}
if (r3 !== null) {
r0 = [r2, r3];
} else {
r0 = null;
pos = r1;
}
} else {
r0 = null;
pos = r1;
}
depth--;
return r0;
}
function parse_SourceCharacter() {
depth++;
var r0;
if (input.length > pos) {
r0 = input.charAt(pos);
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
depth--;
return r0;
}
function parse_EOF() {
depth++;
var r0, r1;
r1 = pos;
reportFailures++;
if (input.length > pos) {
r0 = input.charAt(pos);
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("any character");
}
}
reportFailures--;
if (r0 === null) {
r0 = "";
} else {
r0 = null;
pos = r1;
}
depth--;
return r0;
}
function parse_Keyword() {
depth++;
var r0;
if (input.substr(pos, 8) === "function") {
r0 = "function";
pos += 8;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"function\"");
}
}
if (r0 === null) {
if (input.substr(pos, 2) === "if") {
r0 = "if";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"if\"");
}
}
if (r0 === null) {
if (input.substr(pos, 4) === "then") {
r0 = "then";
pos += 4;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"then\"");
}
}
if (r0 === null) {
if (input.substr(pos, 4) === "elif") {
r0 = "elif";
pos += 4;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"elif\"");
}
}
if (r0 === null) {
if (input.substr(pos, 4) === "else") {
r0 = "else";
pos += 4;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"else\"");
}
}
if (r0 === null) {
if (input.substr(pos, 2) === "fi") {
r0 = "fi";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"fi\"");
}
}
if (r0 === null) {
if (input.substr(pos, 3) === "for") {
r0 = "for";
pos += 3;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"for\"");
}
}
if (r0 === null) {
if (input.substr(pos, 2) === "in") {
r0 = "in";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"in\"");
}
}
if (r0 === null) {
if (input.substr(pos, 4) === "done") {
r0 = "done";
pos += 4;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"done\"");
}
}
if (r0 === null) {
if (input.substr(pos, 2) === "do") {
r0 = "do";
pos += 2;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"do\"");
}
}
if (r0 === null) {
if (input.substr(pos, 5) === "while") {
r0 = "while";
pos += 5;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"while\"");
}
}
if (r0 === null) {
if (input.charCodeAt(pos) === 33) {
r0 = "!";
pos++;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"!\"");
}
}
if (r0 === null) {
if (input.substr(pos, 6) === "return") {
r0 = "return";
pos += 6;
} else {
r0 = null;
if (reportFailures === 0) {
matchFailed("\"return\"");
}
}
}
}
}
}
}
}
}
}
}
}
}
}
depth--;
return r0;
}
function cleanupExpected(expected) {
expected.sort();
var lastExpected = null;
var cleanExpected = [];
for (var i = 0; i < expected.length; i++) {
if (expected[i] !== lastExpected) {
cleanExpected.push(expected[i]);
lastExpected = expected[i];
}
}
return cleanExpected;
}
function computeErrorPosition() {
/*
* The first idea was to use |String.split| to break the input up to the
* error position along newlines and derive the line and column from
* there. However IE's |split| implementation is so broken that it was
* enough to prevent it.
*/
var line = 1;
var column = 1;
var seenCR = false;
for (var i = 0; i < Math.max(pos, rightmostFailuresPos); i++) {
var ch = input.charAt(i);
if (ch === "\n") {
if (!seenCR) { line++; }
column = 1;
seenCR = false;
} else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
line++;
column = 1;
seenCR = true;
} else {
column++;
seenCR = false;
}
}
return { line: line, column: column };
}
var result = parseFunctions[startRule]();
/*
* The parser is now in one of the following three states:
*
* 1. The parser successfully parsed the whole input.
*
* - |result !== null|
* - |pos === input.length|
* - |rightmostFailuresExpected| may or may not contain something
*
* 2. The parser successfully parsed only a part of the input.
*
* - |result !== null|
* - |pos < input.length|
* - |rightmostFailuresExpected| may or may not contain something
*
* 3. The parser did not successfully parse any part of the input.
*
* - |result === null|
* - |pos === 0|
* - |rightmostFailuresExpected| contains at least one failure
*
* All code following this comment (including called functions) must
* handle these states.
*/
if (result === null || pos !== input.length) {
var offset = Math.max(pos, rightmostFailuresPos);
var found = offset < input.length ? input.charAt(offset) : null;
var errorPosition = computeErrorPosition();
throw new this.SyntaxError(
cleanupExpected(rightmostFailuresExpected),
found,
offset,
errorPosition.line,
errorPosition.column
);
}
return result;
}
};
/* Thrown when a parser encounters a syntax error. */
result.SyntaxError = function(expected, found, offset, line, column) {
function buildMessage(expected, found) {
var expectedHumanized, foundHumanized;
switch (expected.length) {
case 0:
expectedHumanized = "end of input";
break;
case 1:
expectedHumanized = expected[0];
break;
default:
expectedHumanized = expected.slice(0, expected.length - 1).join(", ")
+ " or "
+ expected[expected.length - 1];
}
foundHumanized = found ? quote(found) : "end of input";
return "Expected " + expectedHumanized + " but " + foundHumanized + " found.";
}
this.name = "SyntaxError";
this.expected = expected;
this.found = found;
this.message = buildMessage(expected, found);
this.offset = offset;
this.line = line;
this.column = column;
};
subclass(result.SyntaxError, Error);
return result;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment