UNPKG

ns-formula-parse

Version:

This project is a NetSuite Formula parser based on PEG

1,476 lines (1,363 loc) 55.9 kB
'use strict'; module.exports = (function () { /* * Generated by PEG.js 0.9.0. * * http://pegjs.org/ */ function peg$subclass(child, parent) { function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); } function peg$SyntaxError(message, expected, found, location) { this.message = message; this.expected = expected; this.found = found; this.location = location; this.name = 'SyntaxError'; if (typeof Error.captureStackTrace === 'function') { Error.captureStackTrace(this, peg$SyntaxError); } } peg$subclass(peg$SyntaxError, Error); function peg$parse(input, data) { var options = arguments.length > 1 ? arguments[1] : {}, parser = this, peg$FAILED = {}, peg$startRuleFunctions = {start: peg$parsestart}, peg$startRuleFunction = peg$parsestart, peg$c0 = /^[ \t\n\r]/, peg$c1 = {type: 'class', value: '[ \\t\\n\\r]', description: '[ \\t\\n\\r]'}, peg$c2 = function (v) { var test = v[1], block1 = v[2], block2 = v[3]; if (Array.isArray(block1[0])) block1 = block1[0]; var when = block1[1]; if (!test && when) { return block1[3]; } else if (test == when) { return block1[3]; } else { return block2[1]; } }, peg$c3 = function (e) { return e[1]; }, peg$c4 = function (s) { return s[1].join(''); }, peg$c5 = '||', peg$c6 = {type: 'literal', value: '||', description: '\'||\''}, peg$c7 = function (x) { return x[3]; }, peg$c8 = function () { return text(); }, peg$c9 = '\'', peg$c10 = {type: 'literal', value: '\'', description: '\''}, peg$c11 = '\'', peg$c12 = {type: 'literal', value: '\'', description: '\'\\\'\''}, peg$c13 = {type: 'any', description: 'any character'}, peg$c14 = /^[A-Za-z0-9_\-]/, peg$c15 = {type: 'class', value: '[A-Za-z0-9_\\-]', description: '[A-Za-z0-9_\\-]'}, peg$c16 = function (str) { return str.join(''); }, peg$c17 = function (v, bo) { return v + bo.join(''); }, peg$c18 = '(', peg$c19 = {type: 'literal', value: '(', description: '\'(\''}, peg$c20 = ')', peg$c21 = {type: 'literal', value: ')', description: '\')\''}, peg$c22 = function (bs) { bs.pop(); bs = bs.splice(1); return bs.map(function (w) { if (Array.isArray(w)) return w.join(''); else return w; }).join(''); }, peg$c23 = '{', peg$c24 = {type: 'literal', value: '{', description: '\'{\''}, peg$c25 = '.', peg$c26 = {type: 'literal', value: '.', description: '\'.\''}, peg$c27 = '}', peg$c28 = {type: 'literal', value: '}', description: '\'}\''}, peg$c29 = function (s) { var val = s[1] + (s[2] ? s[2].join('') : ''); return data[val]; }, peg$c30 = 'AND', peg$c31 = {type: 'literal', value: 'AND', description: '\'AND\''}, peg$c32 = 'and', peg$c33 = {type: 'literal', value: 'and', description: '\'and\''}, peg$c34 = function (w) { return w[1]; }, peg$c35 = 'BETWEEN', peg$c36 = {type: 'literal', value: 'BETWEEN', description: '\'BETWEEN\''}, peg$c37 = 'between', peg$c38 = {type: 'literal', value: 'between', description: '\'between\''}, peg$c39 = 'CASE', peg$c40 = {type: 'literal', value: 'CASE', description: '\'CASE\''}, peg$c41 = 'case', peg$c42 = {type: 'literal', value: 'case', description: '\'case\''}, peg$c43 = 'ELSE', peg$c44 = {type: 'literal', value: 'ELSE', description: '\'ELSE\''}, peg$c45 = 'else', peg$c46 = {type: 'literal', value: 'else', description: '\'else\''}, peg$c47 = 'END', peg$c48 = {type: 'literal', value: 'END', description: '\'END\''}, peg$c49 = 'end', peg$c50 = {type: 'literal', value: 'end', description: '\'end\''}, peg$c51 = 'IS', peg$c52 = {type: 'literal', value: 'IS', description: '\'IS\''}, peg$c53 = 'is', peg$c54 = {type: 'literal', value: 'is', description: '\'is\''}, peg$c55 = 'ISNULL', peg$c56 = {type: 'literal', value: 'ISNULL', description: '\'ISNULL\''}, peg$c57 = 'isnull', peg$c58 = {type: 'literal', value: 'isnull', description: '\'isnull\''}, peg$c59 = 'NOT', peg$c60 = {type: 'literal', value: 'NOT', description: '\'NOT\''}, peg$c61 = 'not', peg$c62 = {type: 'literal', value: 'not', description: '\'not\''}, peg$c63 = 'NULL', peg$c64 = {type: 'literal', value: 'NULL', description: '\'NULL\''}, peg$c65 = 'null', peg$c66 = {type: 'literal', value: 'null', description: '\'null\''}, peg$c67 = 'NOTNULL', peg$c68 = {type: 'literal', value: 'NOTNULL', description: '\'NOTNULL\''}, peg$c69 = 'notnull', peg$c70 = {type: 'literal', value: 'notnull', description: '\'notnull\''}, peg$c71 = 'THEN', peg$c72 = {type: 'literal', value: 'THEN', description: '\'THEN\''}, peg$c73 = 'then', peg$c74 = {type: 'literal', value: 'then', description: '\'then\''}, peg$c75 = 'WHEN', peg$c76 = {type: 'literal', value: 'WHEN', description: '\'WHEN\''}, peg$c77 = 'when', peg$c78 = {type: 'literal', value: 'when', description: '\'when\''}, peg$currPos = 0, peg$savedPos = 0, peg$posDetailsCache = [{line: 1, column: 1, seenCR: false}], peg$maxFailPos = 0, peg$maxFailExpected = [], peg$silentFails = 0, peg$result; if ('startRule' in options) { if (!(options.startRule in peg$startRuleFunctions)) { throw new Error('Can\'t start parsing from rule \'' + options.startRule + '\'.'); } peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; } function text() { return input.substring(peg$savedPos, peg$currPos); } function location() { return peg$computeLocation(peg$savedPos, peg$currPos); } function expected(description) { throw peg$buildException( null, [{type: 'other', description: description}], input.substring(peg$savedPos, peg$currPos), peg$computeLocation(peg$savedPos, peg$currPos) ); } function error(message) { throw peg$buildException( message, null, input.substring(peg$savedPos, peg$currPos), peg$computeLocation(peg$savedPos, peg$currPos) ); } function peg$computePosDetails(pos) { var details = peg$posDetailsCache[pos], p, ch; if (details) { return details; } else { p = pos - 1; while (!peg$posDetailsCache[p]) { p--; } details = peg$posDetailsCache[p]; details = { line: details.line, column: details.column, seenCR: details.seenCR }; while (p < pos) { ch = input.charAt(p); if (ch === '\n') { if (!details.seenCR) { details.line++; } details.column = 1; details.seenCR = false; } else if (ch === '\r' || ch === '\u2028' || ch === '\u2029') { details.line++; details.column = 1; details.seenCR = true; } else { details.column++; details.seenCR = false; } p++; } peg$posDetailsCache[pos] = details; return details; } } function peg$computeLocation(startPos, endPos) { var startPosDetails = peg$computePosDetails(startPos), endPosDetails = peg$computePosDetails(endPos); return { start: { offset: startPos, line: startPosDetails.line, column: startPosDetails.column }, end: { offset: endPos, line: endPosDetails.line, column: endPosDetails.column } }; } function peg$fail(expected) { if (peg$currPos < peg$maxFailPos) { return; } if (peg$currPos > peg$maxFailPos) { peg$maxFailPos = peg$currPos; peg$maxFailExpected = []; } peg$maxFailExpected.push(expected); } function peg$buildException(message, expected, found, location) { function cleanupExpected(expected) { var i = 1; expected.sort(function (a, b) { if (a.description < b.description) { return -1; } else if (a.description > b.description) { return 1; } else { return 0; } }); while (i < expected.length) { if (expected[i - 1] === expected[i]) { expected.splice(i, 1); } else { i++; } } } function buildMessage(expected, found) { function stringEscape(s) { function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); } return s .replace(/\\/g, '\\\\') .replace(/'/g, '\\"') .replace(/\x08/g, '\\b') .replace(/\t/g, '\\t') .replace(/\n/g, '\\n') .replace(/\f/g, '\\f') .replace(/\r/g, '\\r') .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (ch) { return '\\x0' + hex(ch); }) .replace(/[\x10-\x1F\x80-\xFF]/g, function (ch) { return '\\x' + hex(ch); }) .replace(/[\u0100-\u0FFF]/g, function (ch) { return '\\u0' + hex(ch); }) .replace(/[\u1000-\uFFFF]/g, function (ch) { return '\\u' + hex(ch); }); } var expectedDescs = new Array(expected.length), expectedDesc, foundDesc, i; for (i = 0; i < expected.length; i++) { expectedDescs[i] = expected[i].description; } expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(', ') + ' or ' + expectedDescs[expected.length - 1] : expectedDescs[0]; foundDesc = found ? '\'' + stringEscape(found) + '\'' : 'end of input'; return 'Expected ' + expectedDesc + ' but ' + foundDesc + ' found.'; } if (expected !== null) { cleanupExpected(expected); } return new peg$SyntaxError( message !== null ? message : buildMessage(expected, found), expected, found, location ); } function peg$parsestart() { var s0; s0 = peg$parseblock_select(); if (s0 === peg$FAILED) { s0 = peg$parseblock_select1(); } return s0; } function peg$parsewhitespace() { var s0, s1; s0 = []; if (peg$c0.test(input.charAt(peg$currPos))) { s1 = input.charAt(peg$currPos); peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c1); } } while (s1 !== peg$FAILED) { s0.push(s1); if (peg$c0.test(input.charAt(peg$currPos))) { s1 = input.charAt(peg$currPos); peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c1); } } } return s0; } function peg$parsewhitespace1() { var s0, s1; s0 = []; if (peg$c0.test(input.charAt(peg$currPos))) { s1 = input.charAt(peg$currPos); peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c1); } } if (s1 !== peg$FAILED) { while (s1 !== peg$FAILED) { s0.push(s1); if (peg$c0.test(input.charAt(peg$currPos))) { s1 = input.charAt(peg$currPos); peg$currPos++; } else { s1 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c1); } } } } else { s0 = peg$FAILED; } return s0; } function peg$parsevalue() { var s0; s0 = peg$parsecondition(); if (s0 === peg$FAILED) { s0 = peg$parseselect(); if (s0 === peg$FAILED) { s0 = peg$parsestring(); } } return s0; } function peg$parsecondition() { var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parseCASE(); if (s2 !== peg$FAILED) { s3 = peg$parseexpr(); if (s3 === peg$FAILED) { s3 = null; } if (s3 !== peg$FAILED) { s4 = []; s5 = peg$currPos; s6 = peg$parseWHEN(); if (s6 !== peg$FAILED) { s7 = peg$parseexpr(); if (s7 !== peg$FAILED) { s8 = peg$parseTHEN(); if (s8 !== peg$FAILED) { s9 = peg$parseexpr(); if (s9 !== peg$FAILED) { s6 = [s6, s7, s8, s9]; s5 = s6; } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } if (s5 !== peg$FAILED) { while (s5 !== peg$FAILED) { s4.push(s5); s5 = peg$currPos; s6 = peg$parseWHEN(); if (s6 !== peg$FAILED) { s7 = peg$parseexpr(); if (s7 !== peg$FAILED) { s8 = peg$parseTHEN(); if (s8 !== peg$FAILED) { s9 = peg$parseexpr(); if (s9 !== peg$FAILED) { s6 = [s6, s7, s8, s9]; s5 = s6; } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } } } else { s4 = peg$FAILED; } if (s4 !== peg$FAILED) { s5 = peg$currPos; s6 = peg$parseELSE(); if (s6 !== peg$FAILED) { s7 = peg$parseexpr(); if (s7 !== peg$FAILED) { s6 = [s6, s7]; s5 = s6; } else { peg$currPos = s5; s5 = peg$FAILED; } } else { peg$currPos = s5; s5 = peg$FAILED; } if (s5 === peg$FAILED) { s5 = null; } if (s5 !== peg$FAILED) { s6 = peg$parseEND(); if (s6 !== peg$FAILED) { s2 = [s2, s3, s4, s5, s6]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c2(s1); } s0 = s1; return s0; } function peg$parseexpr() { var s0, s1, s2, s3, s4, s5, s6, s7, s8; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace(); if (s2 !== peg$FAILED) { s3 = peg$parseISNULL(); if (s3 === peg$FAILED) { s3 = peg$parseNOTNULL(); if (s3 === peg$FAILED) { s3 = peg$currPos; s4 = peg$parseNOT(); if (s4 !== peg$FAILED) { s5 = peg$parseNULL(); if (s5 !== peg$FAILED) { s4 = [s4, s5]; s3 = s4; } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } } } if (s3 === peg$FAILED) { s3 = peg$currPos; s4 = peg$parseIS(); if (s4 !== peg$FAILED) { s5 = peg$parseNOT(); if (s5 === peg$FAILED) { s5 = null; } if (s5 !== peg$FAILED) { s6 = peg$parseexpr(); if (s6 !== peg$FAILED) { s4 = [s4, s5, s6]; s3 = s4; } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } if (s3 === peg$FAILED) { s3 = peg$currPos; s4 = peg$parseNOT(); if (s4 === peg$FAILED) { s4 = null; } if (s4 !== peg$FAILED) { s5 = peg$parseBETWEEN(); if (s5 !== peg$FAILED) { s6 = peg$parseexpr(); if (s6 !== peg$FAILED) { s7 = peg$parseAND(); if (s7 !== peg$FAILED) { s8 = peg$parseexpr(); if (s8 !== peg$FAILED) { s4 = [s4, s5, s6, s7, s8]; s3 = s4; } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } } else { peg$currPos = s3; s3 = peg$FAILED; } if (s3 === peg$FAILED) { s3 = peg$parseblock_select(); if (s3 === peg$FAILED) { s3 = peg$parseblock_select1(); } } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c3(s1); } s0 = s1; return s0; } function peg$parsestring() { var s0, s1, s2, s3, s4; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsequot(); if (s2 !== peg$FAILED) { s3 = []; s4 = peg$parsesingle_character(); while (s4 !== peg$FAILED) { s3.push(s4); s4 = peg$parsesingle_character(); } if (s3 !== peg$FAILED) { s4 = peg$parsequot(); if (s4 !== peg$FAILED) { s2 = [s2, s3, s4]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c4(s1); } s0 = s1; return s0; } function peg$parsebinary_operator() { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 2) === peg$c5) { s3 = peg$c5; peg$currPos += 2; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c6); } } if (s3 !== peg$FAILED) { s4 = peg$parsewhitespace(); if (s4 !== peg$FAILED) { s5 = peg$parsevalue(); if (s5 !== peg$FAILED) { s2 = [s2, s3, s4, s5]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c7(s1); } s0 = s1; return s0; } function peg$parsesingle_character() { var s0, s1, s2; s0 = peg$currPos; s1 = peg$currPos; peg$silentFails++; s2 = peg$parsequot(); peg$silentFails--; if (s2 === peg$FAILED) { s1 = void 0; } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { s2 = peg$parsecharacter(); if (s2 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c8(); s0 = s1; } else { peg$currPos = s0; s0 = peg$FAILED; } } else { peg$currPos = s0; s0 = peg$FAILED; } return s0; } function peg$parsequot() { var s0; if (input.charCodeAt(peg$currPos) === 39) { s0 = peg$c9; peg$currPos++; } else { s0 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c10); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 34) { s0 = peg$c11; peg$currPos++; } else { s0 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c12); } } } return s0; } function peg$parsecharacter() { var s0; if (input.length > peg$currPos) { s0 = input.charAt(peg$currPos); peg$currPos++; } else { s0 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c13); } } return s0; } function peg$parsename() { var s0, s1, s2; s0 = peg$currPos; s1 = []; if (peg$c14.test(input.charAt(peg$currPos))) { s2 = input.charAt(peg$currPos); peg$currPos++; } else { s2 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c15); } } if (s2 !== peg$FAILED) { while (s2 !== peg$FAILED) { s1.push(s2); if (peg$c14.test(input.charAt(peg$currPos))) { s2 = input.charAt(peg$currPos); peg$currPos++; } else { s2 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c15); } } } } else { s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c16(s1); } s0 = s1; return s0; } function peg$parseblock_select() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$parsevalue(); if (s1 !== peg$FAILED) { s2 = []; s3 = peg$parsebinary_operator(); while (s3 !== peg$FAILED) { s2.push(s3); s3 = peg$parsebinary_operator(); } if (s2 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c17(s1, s2); s0 = s1; } else { peg$currPos = s0; s0 = peg$FAILED; } } else { peg$currPos = s0; s0 = peg$FAILED; } return s0; } function peg$parseblock_select1() { var s0, s1, s2, s3, s4, s5, s6; s0 = peg$currPos; s1 = peg$currPos; if (input.charCodeAt(peg$currPos) === 40) { s2 = peg$c18; peg$currPos++; } else { s2 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c19); } } if (s2 !== peg$FAILED) { s3 = peg$parsevalue(); if (s3 !== peg$FAILED) { s4 = []; s5 = peg$parsebinary_operator(); while (s5 !== peg$FAILED) { s4.push(s5); s5 = peg$parsebinary_operator(); } if (s4 !== peg$FAILED) { s5 = []; if (input.charCodeAt(peg$currPos) === 41) { s6 = peg$c20; peg$currPos++; } else { s6 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c21); } } while (s6 !== peg$FAILED) { s5.push(s6); if (input.charCodeAt(peg$currPos) === 41) { s6 = peg$c20; peg$currPos++; } else { s6 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c21); } } } if (s5 !== peg$FAILED) { s2 = [s2, s3, s4, s5]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c22(s1); } s0 = s1; return s0; } function peg$parseselect() { var s0, s1, s2, s3, s4, s5, s6; s0 = peg$currPos; s1 = peg$currPos; if (input.charCodeAt(peg$currPos) === 123) { s2 = peg$c23; peg$currPos++; } else { s2 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c24); } } if (s2 !== peg$FAILED) { s3 = peg$parsename(); if (s3 !== peg$FAILED) { s4 = peg$currPos; if (input.charCodeAt(peg$currPos) === 46) { s5 = peg$c25; peg$currPos++; } else { s5 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c26); } } if (s5 !== peg$FAILED) { s6 = peg$parsename(); if (s6 !== peg$FAILED) { s5 = [s5, s6]; s4 = s5; } else { peg$currPos = s4; s4 = peg$FAILED; } } else { peg$currPos = s4; s4 = peg$FAILED; } if (s4 === peg$FAILED) { s4 = null; } if (s4 !== peg$FAILED) { if (input.charCodeAt(peg$currPos) === 125) { s5 = peg$c27; peg$currPos++; } else { s5 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c28); } } if (s5 !== peg$FAILED) { s2 = [s2, s3, s4, s5]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c29(s1); } s0 = s1; return s0; } function peg$parseAND() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace1(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 3) === peg$c30) { s3 = peg$c30; peg$currPos += 3; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c31); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 3) === peg$c32) { s3 = peg$c32; peg$currPos += 3; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c33); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseBETWEEN() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace1(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 7) === peg$c35) { s3 = peg$c35; peg$currPos += 7; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c36); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 7) === peg$c37) { s3 = peg$c37; peg$currPos += 7; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c38); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseCASE() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 4) === peg$c39) { s3 = peg$c39; peg$currPos += 4; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c40); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 4) === peg$c41) { s3 = peg$c41; peg$currPos += 4; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c42); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseELSE() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 4) === peg$c43) { s3 = peg$c43; peg$currPos += 4; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c44); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 4) === peg$c45) { s3 = peg$c45; peg$currPos += 4; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c46); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseEND() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 3) === peg$c47) { s3 = peg$c47; peg$currPos += 3; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c48); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 3) === peg$c49) { s3 = peg$c49; peg$currPos += 3; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c50); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseIS() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace1(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 2) === peg$c51) { s3 = peg$c51; peg$currPos += 2; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c52); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 2) === peg$c53) { s3 = peg$c53; peg$currPos += 2; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c54); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseISNULL() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace1(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 6) === peg$c55) { s3 = peg$c55; peg$currPos += 6; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c56); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 6) === peg$c57) { s3 = peg$c57; peg$currPos += 6; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c58); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseNOT() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace1(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 3) === peg$c59) { s3 = peg$c59; peg$currPos += 3; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c60); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 3) === peg$c61) { s3 = peg$c61; peg$currPos += 3; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c62); } } } if (s3 !== peg$FAILED) { s2 = [s2, s3]; s1 = s2; } else { peg$currPos = s1; s1 = peg$FAILED; } } else { peg$currPos = s1; s1 = peg$FAILED; } if (s1 !== peg$FAILED) { peg$savedPos = s0; s1 = peg$c34(s1); } s0 = s1; return s0; } function peg$parseNULL() { var s0, s1, s2, s3; s0 = peg$currPos; s1 = peg$currPos; s2 = peg$parsewhitespace1(); if (s2 !== peg$FAILED) { if (input.substr(peg$currPos, 4) === peg$c63) { s3 = peg$c63; peg$currPos += 4; } else { s3 = peg$FAILED; if (peg$silentFails === 0) { peg$fail(peg$c64); } } if (s3 === peg$FAILED) { if (input.substr(peg$currPos, 4) === peg$c65) { s3 = peg$c65; peg$currPos += 4; } else { s3 = peg$FAILED; if (peg$