json-fixer-browser
Version:
1,606 lines (1,450 loc) • 36.9 kB
JavaScript
/*
* Generated by PEG.js 0.10.0.
*
* http://pegjs.org/
*/
'use strict'
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)
peg$SyntaxError.buildMessage = function(expected, found) {
var DESCRIBE_EXPECTATION_FNS = {
literal: function(expectation) {
return '"' + literalEscape(expectation.text) + '"'
},
class: function(expectation) {
var escapedParts = '',
i
for (i = 0; i < expectation.parts.length; i++) {
escapedParts +=
expectation.parts[i] instanceof Array
? classEscape(expectation.parts[i][0]) +
'-' +
classEscape(expectation.parts[i][1])
: classEscape(expectation.parts[i])
}
return '[' + (expectation.inverted ? '^' : '') + escapedParts + ']'
},
any: function(expectation) {
return 'any character'
},
end: function(expectation) {
return 'end of input'
},
other: function(expectation) {
return expectation.description
},
}
function hex(ch) {
return ch
.charCodeAt(0)
.toString(16)
.toUpperCase()
}
function literalEscape(s) {
return s
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\0/g, '\\0')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x0F]/g, function(ch) {
return '\\x0' + hex(ch)
})
.replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return '\\x' + hex(ch)
})
}
function classEscape(s) {
return s
.replace(/\\/g, '\\\\')
.replace(/\]/g, '\\]')
.replace(/\^/g, '\\^')
.replace(/-/g, '\\-')
.replace(/\0/g, '\\0')
.replace(/\t/g, '\\t')
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r')
.replace(/[\x00-\x0F]/g, function(ch) {
return '\\x0' + hex(ch)
})
.replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) {
return '\\x' + hex(ch)
})
}
function describeExpectation(expectation) {
return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation)
}
function describeExpected(expected) {
var descriptions = new Array(expected.length),
i,
j
for (i = 0; i < expected.length; i++) {
descriptions[i] = describeExpectation(expected[i])
}
descriptions.sort()
if (descriptions.length > 0) {
for (i = 1, j = 1; i < descriptions.length; i++) {
if (descriptions[i - 1] !== descriptions[i]) {
descriptions[j] = descriptions[i]
j++
}
}
descriptions.length = j
}
switch (descriptions.length) {
case 1:
return descriptions[0]
case 2:
return descriptions[0] + ' or ' + descriptions[1]
default:
return (
descriptions.slice(0, -1).join(', ') +
', or ' +
descriptions[descriptions.length - 1]
)
}
}
function describeFound(found) {
return found ? '"' + literalEscape(found) + '"' : 'end of input'
}
return (
'Expected ' +
describeExpected(expected) +
' but ' +
describeFound(found) +
' found.'
)
}
function peg$parse(input, options) {
options = options !== void 0 ? options : {}
var peg$FAILED = {},
peg$startRuleFunctions = {JSON_text: peg$parseJSON_text},
peg$startRuleFunction = peg$parseJSON_text,
peg$c0 = function(value) {
return value
},
peg$c1 = '[',
peg$c2 = peg$literalExpectation('[', false),
peg$c3 = '{',
peg$c4 = peg$literalExpectation('{', false),
peg$c5 = ']',
peg$c6 = peg$literalExpectation(']', false),
peg$c7 = '}',
peg$c8 = peg$literalExpectation('}', false),
peg$c9 = ':',
peg$c10 = peg$literalExpectation(':', false),
peg$c11 = ',',
peg$c12 = peg$literalExpectation(',', false),
peg$c13 = peg$otherExpectation('whitespace'),
peg$c14 = /^[ \t\n\r]/,
peg$c15 = peg$classExpectation([' ', '\t', '\n', '\r'], false, false),
peg$c16 = 'false',
peg$c17 = peg$literalExpectation('false', false),
peg$c18 = function() {
return false
},
peg$c19 = 'null',
peg$c20 = peg$literalExpectation('null', false),
peg$c21 = function() {
return null
},
peg$c22 = 'true',
peg$c23 = peg$literalExpectation('true', false),
peg$c24 = function() {
return true
},
peg$c25 = function(head, m) {
return m
},
peg$c26 = function(head, tail) {
var result = {}
;[head].concat(tail).forEach(function(element) {
result[element.name] = element.value
})
return result
},
peg$c27 = function(members) {
return members !== null ? members : {}
},
peg$c28 = function(name, value) {
return {name: name, value: value}
},
peg$c29 = function(head, v) {
return v
},
peg$c30 = function(head, tail) {
return [head].concat(tail)
},
peg$c31 = function(values) {
return values !== null ? values : []
},
peg$c32 = peg$otherExpectation('number'),
peg$c33 = function() {
return parseFloat(text())
},
peg$c34 = '.',
peg$c35 = peg$literalExpectation('.', false),
peg$c36 = /^[1-9]/,
peg$c37 = peg$classExpectation([['1', '9']], false, false),
peg$c38 = /^[eE]/,
peg$c39 = peg$classExpectation(['e', 'E'], false, false),
peg$c40 = '-',
peg$c41 = peg$literalExpectation('-', false),
peg$c42 = '+',
peg$c43 = peg$literalExpectation('+', false),
peg$c44 = '0',
peg$c45 = peg$literalExpectation('0', false),
peg$c46 = peg$otherExpectation('string'),
peg$c47 = function(chars) {
return chars.join('')
},
peg$c48 = '"',
peg$c49 = peg$literalExpectation('"', false),
peg$c50 = '\\',
peg$c51 = peg$literalExpectation('\\', false),
peg$c52 = '/',
peg$c53 = peg$literalExpectation('/', false),
peg$c54 = 'b',
peg$c55 = peg$literalExpectation('b', false),
peg$c56 = function() {
return '\b'
},
peg$c57 = 'f',
peg$c58 = peg$literalExpectation('f', false),
peg$c59 = function() {
return '\f'
},
peg$c60 = 'n',
peg$c61 = peg$literalExpectation('n', false),
peg$c62 = function() {
return '\n'
},
peg$c63 = 'r',
peg$c64 = peg$literalExpectation('r', false),
peg$c65 = function() {
return '\r'
},
peg$c66 = 't',
peg$c67 = peg$literalExpectation('t', false),
peg$c68 = function() {
return '\t'
},
peg$c69 = 'u',
peg$c70 = peg$literalExpectation('u', false),
peg$c71 = function(digits) {
return String.fromCharCode(parseInt(digits, 16))
},
peg$c72 = function(sequence) {
return sequence
},
peg$c73 = /^[^\0-\x1F"\\]/,
peg$c74 = peg$classExpectation([['\0', '\x1F'], '"', '\\'], true, false),
peg$c75 = /^[0-9]/,
peg$c76 = peg$classExpectation([['0', '9']], false, false),
peg$c77 = /^[0-9a-f]/i,
peg$c78 = peg$classExpectation([['0', '9'], ['a', 'f']], false, true),
peg$currPos = 0,
peg$savedPos = 0,
peg$posDetailsCache = [{line: 1, column: 1}],
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, location) {
location =
location !== void 0
? location
: peg$computeLocation(peg$savedPos, peg$currPos)
throw peg$buildStructuredError(
[peg$otherExpectation(description)],
input.substring(peg$savedPos, peg$currPos),
location,
)
}
function error(message, location) {
location =
location !== void 0
? location
: peg$computeLocation(peg$savedPos, peg$currPos)
throw peg$buildSimpleError(message, location)
}
function peg$literalExpectation(text, ignoreCase) {
return {type: 'literal', text: text, ignoreCase: ignoreCase}
}
function peg$classExpectation(parts, inverted, ignoreCase) {
return {
type: 'class',
parts: parts,
inverted: inverted,
ignoreCase: ignoreCase,
}
}
function peg$anyExpectation() {
return {type: 'any'}
}
function peg$endExpectation() {
return {type: 'end'}
}
function peg$otherExpectation(description) {
return {type: 'other', description: description}
}
function peg$computePosDetails(pos) {
var details = peg$posDetailsCache[pos],
p
if (details) {
return details
} else {
p = pos - 1
while (!peg$posDetailsCache[p]) {
p--
}
details = peg$posDetailsCache[p]
details = {
line: details.line,
column: details.column,
}
while (p < pos) {
if (input.charCodeAt(p) === 10) {
details.line++
details.column = 1
} else {
details.column++
}
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$buildSimpleError(message, location) {
return new peg$SyntaxError(message, null, null, location)
}
function peg$buildStructuredError(expected, found, location) {
return new peg$SyntaxError(
peg$SyntaxError.buildMessage(expected, found),
expected,
found,
location,
)
}
function peg$parseJSON_text() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
s2 = peg$parsevalue()
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c0(s2)
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsebegin_array() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 91) {
s2 = peg$c1
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c2)
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsebegin_object() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 123) {
s2 = peg$c3
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c4)
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parseend_array() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 93) {
s2 = peg$c5
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c6)
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parseend_object() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 125) {
s2 = peg$c7
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c8)
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsename_separator() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 58) {
s2 = peg$c9
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c10)
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsevalue_separator() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsews()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 44) {
s2 = peg$c11
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c12)
}
}
if (s2 !== peg$FAILED) {
s3 = peg$parsews()
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsews() {
var s0, s1
peg$silentFails++
s0 = []
if (peg$c14.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos)
peg$currPos++
} else {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c15)
}
}
while (s1 !== peg$FAILED) {
s0.push(s1)
if (peg$c14.test(input.charAt(peg$currPos))) {
s1 = input.charAt(peg$currPos)
peg$currPos++
} else {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c15)
}
}
}
peg$silentFails--
if (s0 === peg$FAILED) {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c13)
}
}
return s0
}
function peg$parsevalue() {
var s0
s0 = peg$parsefalse()
if (s0 === peg$FAILED) {
s0 = peg$parsenull()
if (s0 === peg$FAILED) {
s0 = peg$parsetrue()
if (s0 === peg$FAILED) {
s0 = peg$parseobject()
if (s0 === peg$FAILED) {
s0 = peg$parsearray()
if (s0 === peg$FAILED) {
s0 = peg$parsenumber()
if (s0 === peg$FAILED) {
s0 = peg$parsestring()
}
}
}
}
}
}
return s0
}
function peg$parsefalse() {
var s0, s1
s0 = peg$currPos
if (input.substr(peg$currPos, 5) === peg$c16) {
s1 = peg$c16
peg$currPos += 5
} else {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c17)
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c18()
}
s0 = s1
return s0
}
function peg$parsenull() {
var s0, s1
s0 = peg$currPos
if (input.substr(peg$currPos, 4) === peg$c19) {
s1 = peg$c19
peg$currPos += 4
} else {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c20)
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c21()
}
s0 = s1
return s0
}
function peg$parsetrue() {
var s0, s1
s0 = peg$currPos
if (input.substr(peg$currPos, 4) === peg$c22) {
s1 = peg$c22
peg$currPos += 4
} else {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c23)
}
}
if (s1 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c24()
}
s0 = s1
return s0
}
function peg$parseobject() {
var s0, s1, s2, s3, s4, s5, s6, s7
s0 = peg$currPos
s1 = peg$parsebegin_object()
if (s1 !== peg$FAILED) {
s2 = peg$currPos
s3 = peg$parsemember()
if (s3 !== peg$FAILED) {
s4 = []
s5 = peg$currPos
s6 = peg$parsevalue_separator()
if (s6 !== peg$FAILED) {
s7 = peg$parsemember()
if (s7 !== peg$FAILED) {
peg$savedPos = s5
s6 = peg$c25(s3, s7)
s5 = s6
} else {
peg$currPos = s5
s5 = peg$FAILED
}
} else {
peg$currPos = s5
s5 = peg$FAILED
}
while (s5 !== peg$FAILED) {
s4.push(s5)
s5 = peg$currPos
s6 = peg$parsevalue_separator()
if (s6 !== peg$FAILED) {
s7 = peg$parsemember()
if (s7 !== peg$FAILED) {
peg$savedPos = s5
s6 = peg$c25(s3, s7)
s5 = s6
} else {
peg$currPos = s5
s5 = peg$FAILED
}
} else {
peg$currPos = s5
s5 = peg$FAILED
}
}
if (s4 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c26(s3, s4)
s2 = s3
} else {
peg$currPos = s2
s2 = peg$FAILED
}
} else {
peg$currPos = s2
s2 = peg$FAILED
}
if (s2 === peg$FAILED) {
s2 = null
}
if (s2 !== peg$FAILED) {
s3 = peg$parseend_object()
if (s3 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c27(s2)
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsemember() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsestring()
if (s1 !== peg$FAILED) {
s2 = peg$parsename_separator()
if (s2 !== peg$FAILED) {
s3 = peg$parsevalue()
if (s3 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c28(s1, s3)
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsearray() {
var s0, s1, s2, s3, s4, s5, s6, s7
s0 = peg$currPos
s1 = peg$parsebegin_array()
if (s1 !== peg$FAILED) {
s2 = peg$currPos
s3 = peg$parsevalue()
if (s3 !== peg$FAILED) {
s4 = []
s5 = peg$currPos
s6 = peg$parsevalue_separator()
if (s6 !== peg$FAILED) {
s7 = peg$parsevalue()
if (s7 !== peg$FAILED) {
peg$savedPos = s5
s6 = peg$c29(s3, s7)
s5 = s6
} else {
peg$currPos = s5
s5 = peg$FAILED
}
} else {
peg$currPos = s5
s5 = peg$FAILED
}
while (s5 !== peg$FAILED) {
s4.push(s5)
s5 = peg$currPos
s6 = peg$parsevalue_separator()
if (s6 !== peg$FAILED) {
s7 = peg$parsevalue()
if (s7 !== peg$FAILED) {
peg$savedPos = s5
s6 = peg$c29(s3, s7)
s5 = s6
} else {
peg$currPos = s5
s5 = peg$FAILED
}
} else {
peg$currPos = s5
s5 = peg$FAILED
}
}
if (s4 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c30(s3, s4)
s2 = s3
} else {
peg$currPos = s2
s2 = peg$FAILED
}
} else {
peg$currPos = s2
s2 = peg$FAILED
}
if (s2 === peg$FAILED) {
s2 = null
}
if (s2 !== peg$FAILED) {
s3 = peg$parseend_array()
if (s3 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c31(s2)
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsenumber() {
var s0, s1, s2, s3, s4
peg$silentFails++
s0 = peg$currPos
s1 = peg$parseminus()
if (s1 === peg$FAILED) {
s1 = null
}
if (s1 !== peg$FAILED) {
s2 = peg$parseint()
if (s2 !== peg$FAILED) {
s3 = peg$parsefrac()
if (s3 === peg$FAILED) {
s3 = null
}
if (s3 !== peg$FAILED) {
s4 = peg$parseexp()
if (s4 === peg$FAILED) {
s4 = null
}
if (s4 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c33()
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
peg$silentFails--
if (s0 === peg$FAILED) {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c32)
}
}
return s0
}
function peg$parsedecimal_point() {
var s0
if (input.charCodeAt(peg$currPos) === 46) {
s0 = peg$c34
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c35)
}
}
return s0
}
function peg$parsedigit1_9() {
var s0
if (peg$c36.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos)
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c37)
}
}
return s0
}
function peg$parsee() {
var s0
if (peg$c38.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos)
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c39)
}
}
return s0
}
function peg$parseexp() {
var s0, s1, s2, s3, s4
s0 = peg$currPos
s1 = peg$parsee()
if (s1 !== peg$FAILED) {
s2 = peg$parseminus()
if (s2 === peg$FAILED) {
s2 = peg$parseplus()
}
if (s2 === peg$FAILED) {
s2 = null
}
if (s2 !== peg$FAILED) {
s3 = []
s4 = peg$parseDIGIT()
if (s4 !== peg$FAILED) {
while (s4 !== peg$FAILED) {
s3.push(s4)
s4 = peg$parseDIGIT()
}
} else {
s3 = peg$FAILED
}
if (s3 !== peg$FAILED) {
s1 = [s1, s2, s3]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parsefrac() {
var s0, s1, s2, s3
s0 = peg$currPos
s1 = peg$parsedecimal_point()
if (s1 !== peg$FAILED) {
s2 = []
s3 = peg$parseDIGIT()
if (s3 !== peg$FAILED) {
while (s3 !== peg$FAILED) {
s2.push(s3)
s3 = peg$parseDIGIT()
}
} else {
s2 = peg$FAILED
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
return s0
}
function peg$parseint() {
var s0, s1, s2, s3
s0 = peg$parsezero()
if (s0 === peg$FAILED) {
s0 = peg$currPos
s1 = peg$parsedigit1_9()
if (s1 !== peg$FAILED) {
s2 = []
s3 = peg$parseDIGIT()
while (s3 !== peg$FAILED) {
s2.push(s3)
s3 = peg$parseDIGIT()
}
if (s2 !== peg$FAILED) {
s1 = [s1, s2]
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
}
return s0
}
function peg$parseminus() {
var s0
if (input.charCodeAt(peg$currPos) === 45) {
s0 = peg$c40
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c41)
}
}
return s0
}
function peg$parseplus() {
var s0
if (input.charCodeAt(peg$currPos) === 43) {
s0 = peg$c42
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c43)
}
}
return s0
}
function peg$parsezero() {
var s0
if (input.charCodeAt(peg$currPos) === 48) {
s0 = peg$c44
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c45)
}
}
return s0
}
function peg$parsestring() {
var s0, s1, s2, s3
peg$silentFails++
s0 = peg$currPos
s1 = peg$parsequotation_mark()
if (s1 !== peg$FAILED) {
s2 = []
s3 = peg$parsechar()
while (s3 !== peg$FAILED) {
s2.push(s3)
s3 = peg$parsechar()
}
if (s2 !== peg$FAILED) {
s3 = peg$parsequotation_mark()
if (s3 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c47(s2)
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
peg$silentFails--
if (s0 === peg$FAILED) {
s1 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c46)
}
}
return s0
}
function peg$parsechar() {
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9
s0 = peg$parseunescaped()
if (s0 === peg$FAILED) {
s0 = peg$currPos
s1 = peg$parseescape()
if (s1 !== peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 34) {
s2 = peg$c48
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c49)
}
}
if (s2 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 92) {
s2 = peg$c50
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c51)
}
}
if (s2 === peg$FAILED) {
if (input.charCodeAt(peg$currPos) === 47) {
s2 = peg$c52
peg$currPos++
} else {
s2 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c53)
}
}
if (s2 === peg$FAILED) {
s2 = peg$currPos
if (input.charCodeAt(peg$currPos) === 98) {
s3 = peg$c54
peg$currPos++
} else {
s3 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c55)
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c56()
}
s2 = s3
if (s2 === peg$FAILED) {
s2 = peg$currPos
if (input.charCodeAt(peg$currPos) === 102) {
s3 = peg$c57
peg$currPos++
} else {
s3 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c58)
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c59()
}
s2 = s3
if (s2 === peg$FAILED) {
s2 = peg$currPos
if (input.charCodeAt(peg$currPos) === 110) {
s3 = peg$c60
peg$currPos++
} else {
s3 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c61)
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c62()
}
s2 = s3
if (s2 === peg$FAILED) {
s2 = peg$currPos
if (input.charCodeAt(peg$currPos) === 114) {
s3 = peg$c63
peg$currPos++
} else {
s3 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c64)
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c65()
}
s2 = s3
if (s2 === peg$FAILED) {
s2 = peg$currPos
if (input.charCodeAt(peg$currPos) === 116) {
s3 = peg$c66
peg$currPos++
} else {
s3 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c67)
}
}
if (s3 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c68()
}
s2 = s3
if (s2 === peg$FAILED) {
s2 = peg$currPos
if (input.charCodeAt(peg$currPos) === 117) {
s3 = peg$c69
peg$currPos++
} else {
s3 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c70)
}
}
if (s3 !== peg$FAILED) {
s4 = peg$currPos
s5 = peg$currPos
s6 = peg$parseHEXDIG()
if (s6 !== peg$FAILED) {
s7 = peg$parseHEXDIG()
if (s7 !== peg$FAILED) {
s8 = peg$parseHEXDIG()
if (s8 !== peg$FAILED) {
s9 = peg$parseHEXDIG()
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) {
s4 = input.substring(s4, peg$currPos)
} else {
s4 = s5
}
if (s4 !== peg$FAILED) {
peg$savedPos = s2
s3 = peg$c71(s4)
s2 = s3
} else {
peg$currPos = s2
s2 = peg$FAILED
}
} else {
peg$currPos = s2
s2 = peg$FAILED
}
}
}
}
}
}
}
}
}
if (s2 !== peg$FAILED) {
peg$savedPos = s0
s1 = peg$c72(s2)
s0 = s1
} else {
peg$currPos = s0
s0 = peg$FAILED
}
} else {
peg$currPos = s0
s0 = peg$FAILED
}
}
return s0
}
function peg$parseescape() {
var s0
if (input.charCodeAt(peg$currPos) === 92) {
s0 = peg$c50
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c51)
}
}
return s0
}
function peg$parsequotation_mark() {
var s0
if (input.charCodeAt(peg$currPos) === 34) {
s0 = peg$c48
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c49)
}
}
return s0
}
function peg$parseunescaped() {
var s0
if (peg$c73.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos)
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c74)
}
}
return s0
}
function peg$parseDIGIT() {
var s0
if (peg$c75.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos)
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c76)
}
}
return s0
}
function peg$parseHEXDIG() {
var s0
if (peg$c77.test(input.charAt(peg$currPos))) {
s0 = input.charAt(peg$currPos)
peg$currPos++
} else {
s0 = peg$FAILED
if (peg$silentFails === 0) {
peg$fail(peg$c78)
}
}
return s0
}
peg$result = peg$startRuleFunction()
if (peg$result !== peg$FAILED && peg$currPos === input.length) {
return peg$result
} else {
if (peg$result !== peg$FAILED && peg$currPos < input.length) {
peg$fail(peg$endExpectation())
}
throw peg$buildStructuredError(
peg$maxFailExpected,
peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
peg$maxFailPos < input.length
? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
: peg$computeLocation(peg$maxFailPos, peg$maxFailPos),
)
}
}
module.exports = {
SyntaxError: peg$SyntaxError,
parse: peg$parse,
}