ranges: boolean (optional: true ==> token location info will include a .range[] member)\n
flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n
backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n
range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n
}\n
\n
\n
the parseError function receives a \'hash\' object with these members for lexer and parser errors: {\n
text: (matched text)\n
token: (the produced terminal token, if any)\n
line: (yylineno)\n
}\n
while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n
loc: (yylloc)\n
expected: (string describing the set of expected tokens)\n
recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n
}\n
*/\n
var parser = (function(){\n
var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,5],$V1=[1,7],$V2=[1,8],$V3=[1,10],$V4=[1,12],$V5=[1,6,7,15],$V6=[1,6,7,9,12,14,15,16,19,21],$V7=[1,6,7,9,11,12,14,15,16,19,21],$V8=[2,17];\n
// When called from action, caches matched text and appends it on next action\n
more:function () {\n
this._more = true;\n
return this;\n
},\n
\n
// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n
reject:function () {\n
if (this.options.backtrack_lexer) {\n
this._backtrack = true;\n
} else {\n
return this.parseError(\'Lexical error on line \' + (this.yylineno + 1) + \'. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n\' + this.showPosition(), {\n
text: "",\n
token: null,\n
line: this.yylineno\n
});\n
\n
}\n
return this;\n
},\n
\n
// retain first n characters of the match\n
less:function (n) {\n
this.unput(this.match.slice(n));\n
},\n
\n
// displays already matched input, i.e. for error messages\n
pastInput:function () {\n
var past = this.matched.substr(0, this.matched.length - this.match.length);\n