Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Paste
P777
Old backend
Active
Public
Actions
Authored by
tstarling
on Jun 11 2015, 10:41 PM.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Award Token
Flag For Later
Tags
None
Referenced Files
F178094: Old backend
Jun 11 2015, 10:41 PM
2015-06-11 22:41:31 (UTC+0)
Subscribers
None
module
.
exports
=
(
function
()
{
/*
* Generated by PEG.js 0.8.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"
;
}
peg$subclass
(
peg$SyntaxError
,
Error
);
var
exports
=
{
SyntaxError
:
peg$SyntaxError
,
};
function
peg$parse
(
input
)
{
var
options
=
arguments
.
length
>
1
?
arguments
[
1
]
:
{},
parser
=
this
,
peg$FAILED
=
{},
peg$startRuleFunctions
=
{
Expression
:
peg$parseExpression
},
peg$startRuleFunction
=
peg$parseExpression
,
peg$c0
=
"+"
,
peg$c1
=
{
type
:
"literal"
,
value
:
"+"
,
description
:
"\"+\""
},
peg$c2
=
"-"
,
peg$c3
=
{
type
:
"literal"
,
value
:
"-"
,
description
:
"\"-\""
},
peg$c4
=
function
(
first
,
rest
)
{
return
combine
(
first
,
rest
,
{
"+"
:
function
(
left
,
right
)
{
return
left
+
right
;
},
"-"
:
function
(
left
,
right
)
{
return
left
-
right
;
}
});
},
peg$c5
=
"*"
,
peg$c6
=
{
type
:
"literal"
,
value
:
"*"
,
description
:
"\"*\""
},
peg$c7
=
"/"
,
peg$c8
=
{
type
:
"literal"
,
value
:
"/"
,
description
:
"\"/\""
},
peg$c9
=
function
(
first
,
rest
)
{
return
combine
(
first
,
rest
,
{
"*"
:
function
(
left
,
right
)
{
return
left
*
right
;
},
"/"
:
function
(
left
,
right
)
{
return
left
/
right
;
}
});
},
peg$c10
=
"("
,
peg$c11
=
{
type
:
"literal"
,
value
:
"("
,
description
:
"\"(\""
},
peg$c12
=
")"
,
peg$c13
=
{
type
:
"literal"
,
value
:
")"
,
description
:
"\")\""
},
peg$c14
=
function
(
expr
)
{
return
expr
;
},
peg$c15
=
{
type
:
"other"
,
description
:
"integer"
},
peg$c16
=
/^[0-9]/
,
peg$c17
=
{
type
:
"class"
,
value
:
"[0-9]"
,
description
:
"[0-9]"
},
peg$c18
=
function
()
{
return
parseInt
(
text
(),
10
);
},
peg$c19
=
{
type
:
"other"
,
description
:
"whitespace"
},
peg$c20
=
/^[ \t\n\r]/
,
peg$c21
=
{
type
:
"class"
,
value
:
"[ \\t\\n\\r]"
,
description
:
"[ \\t\\n\\r]"
},
peg$currPos
=
0
,
peg$savedPos
=
0
,
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
];
}
// common-helpers.js
var
peg$posDetailsCache
=
[{
line
:
1
,
column
:
1
,
seenCR
:
false
}],
peg$maxFailPos
=
0
,
peg$maxFailExpected
=
[];
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$failAtPosition
(
pos
,
expected
)
{
if
(
pos
<
peg$maxFailPos
)
{
return
;
}
if
(
pos
>
peg$maxFailPos
)
{
peg$maxFailPos
=
pos
;
peg$maxFailExpected
=
[];
}
peg$maxFailExpected
.
push
(
expected
);
}
function
peg$buildException
(
message
,
expected
,
found
,
location
)
{
function
cleanupExpected
(
expected
)
{
expected
.
sort
(
function
(
a
,
b
)
{
if
(
a
.
description
<
b
.
description
)
{
return
-
1
;
}
else
if
(
a
.
description
>
b
.
description
)
{
return
1
;
}
else
{
return
0
;
}
});
peg$removeExpectedDuplicates
(
expected
);
}
function
buildMessage
(
expected
,
found
)
{
function
stringEscape
(
s
)
{
function
hex
(
ch
)
{
return
ch
.
charCodeAt
(
0
).
toString
(
16
).
toUpperCase
();
}
/*
* 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 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 double quote
.
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\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
);
}
// stackvm-helpers.js
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$fail
(
expected
)
{
return
peg$failAtPosition
(
peg$currPos
,
expected
);
}
function
peg$removeExpectedDuplicates
(
expected
)
{
var
i
=
1
;
/*
* This works because the bytecode generator guarantees that every
* expectation object exists only once, so it's enough to use |===| instead
* of deeper structural comparison.
*/
while
(
i
<
expected
.
length
)
{
if
(
expected
[
i
-
1
]
===
expected
[
i
])
{
expected
.
splice
(
i
,
1
);
}
else
{
i
++
;
}
}
}
function
peg$parseExpression
()
{
var
s0
,
s1
,
s2
,
s3
,
s4
,
s5
,
s6
,
s7
;
s0
=
peg$currPos
;
s1
=
peg$parseTerm
();
if
(
s1
!==
peg$FAILED
)
{
s2
=
[];
s3
=
peg$currPos
;
s4
=
peg$parse_
();
if
(
s4
!==
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
43
)
{
s5
=
peg$c0
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c1
);
}
}
if
(
s5
===
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
45
)
{
s5
=
peg$c2
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c3
);
}
}
}
if
(
s5
!==
peg$FAILED
)
{
s6
=
peg$parse_
();
if
(
s6
!==
peg$FAILED
)
{
s7
=
peg$parseTerm
();
if
(
s7
!==
peg$FAILED
)
{
s4
=
[
s4
,
s5
,
s6
,
s7
];
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
;
}
while
(
s3
!==
peg$FAILED
)
{
s2
.
push
(
s3
);
s3
=
peg$currPos
;
s4
=
peg$parse_
();
if
(
s4
!==
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
43
)
{
s5
=
peg$c0
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c1
);
}
}
if
(
s5
===
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
45
)
{
s5
=
peg$c2
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c3
);
}
}
}
if
(
s5
!==
peg$FAILED
)
{
s6
=
peg$parse_
();
if
(
s6
!==
peg$FAILED
)
{
s7
=
peg$parseTerm
();
if
(
s7
!==
peg$FAILED
)
{
s4
=
[
s4
,
s5
,
s6
,
s7
];
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
;
}
}
if
(
s2
!==
peg$FAILED
)
{
peg$savedPos
=
s0
;
s1
=
peg$c4
(
s1
,
s2
);
s0
=
s1
;
}
else
{
peg$currPos
=
s0
;
s0
=
peg$FAILED
;
}
}
else
{
peg$currPos
=
s0
;
s0
=
peg$FAILED
;
}
return
s0
;
}
function
peg$parseTerm
()
{
var
s0
,
s1
,
s2
,
s3
,
s4
,
s5
,
s6
,
s7
;
s0
=
peg$currPos
;
s1
=
peg$parseFactor
();
if
(
s1
!==
peg$FAILED
)
{
s2
=
[];
s3
=
peg$currPos
;
s4
=
peg$parse_
();
if
(
s4
!==
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
42
)
{
s5
=
peg$c5
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c6
);
}
}
if
(
s5
===
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
47
)
{
s5
=
peg$c7
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c8
);
}
}
}
if
(
s5
!==
peg$FAILED
)
{
s6
=
peg$parse_
();
if
(
s6
!==
peg$FAILED
)
{
s7
=
peg$parseFactor
();
if
(
s7
!==
peg$FAILED
)
{
s4
=
[
s4
,
s5
,
s6
,
s7
];
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
;
}
while
(
s3
!==
peg$FAILED
)
{
s2
.
push
(
s3
);
s3
=
peg$currPos
;
s4
=
peg$parse_
();
if
(
s4
!==
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
42
)
{
s5
=
peg$c5
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c6
);
}
}
if
(
s5
===
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
47
)
{
s5
=
peg$c7
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c8
);
}
}
}
if
(
s5
!==
peg$FAILED
)
{
s6
=
peg$parse_
();
if
(
s6
!==
peg$FAILED
)
{
s7
=
peg$parseFactor
();
if
(
s7
!==
peg$FAILED
)
{
s4
=
[
s4
,
s5
,
s6
,
s7
];
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
;
}
}
if
(
s2
!==
peg$FAILED
)
{
peg$savedPos
=
s0
;
s1
=
peg$c9
(
s1
,
s2
);
s0
=
s1
;
}
else
{
peg$currPos
=
s0
;
s0
=
peg$FAILED
;
}
}
else
{
peg$currPos
=
s0
;
s0
=
peg$FAILED
;
}
return
s0
;
}
function
peg$parseFactor
()
{
var
s0
,
s1
,
s2
,
s3
,
s4
,
s5
;
s0
=
peg$currPos
;
if
(
input
.
charCodeAt
(
peg$currPos
)
===
40
)
{
s1
=
peg$c10
;
peg$currPos
++
;
}
else
{
s1
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c11
);
}
}
if
(
s1
!==
peg$FAILED
)
{
s2
=
peg$parse_
();
if
(
s2
!==
peg$FAILED
)
{
s3
=
peg$parseExpression
();
if
(
s3
!==
peg$FAILED
)
{
s4
=
peg$parse_
();
if
(
s4
!==
peg$FAILED
)
{
if
(
input
.
charCodeAt
(
peg$currPos
)
===
41
)
{
s5
=
peg$c12
;
peg$currPos
++
;
}
else
{
s5
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c13
);
}
}
if
(
s5
!==
peg$FAILED
)
{
peg$savedPos
=
s0
;
s1
=
peg$c14
(
s3
);
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
;
}
}
else
{
peg$currPos
=
s0
;
s0
=
peg$FAILED
;
}
if
(
s0
===
peg$FAILED
)
{
s0
=
peg$parseInteger
();
}
return
s0
;
}
function
peg$parseInteger
()
{
var
s0
,
s1
,
s2
;
peg$silentFails
++
;
s0
=
peg$currPos
;
s1
=
[];
if
(
peg$c16
.
test
(
input
.
charAt
(
peg$currPos
)))
{
s2
=
input
.
charAt
(
peg$currPos
);
peg$currPos
++
;
}
else
{
s2
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c17
);
}
}
if
(
s2
!==
peg$FAILED
)
{
while
(
s2
!==
peg$FAILED
)
{
s1
.
push
(
s2
);
if
(
peg$c16
.
test
(
input
.
charAt
(
peg$currPos
)))
{
s2
=
input
.
charAt
(
peg$currPos
);
peg$currPos
++
;
}
else
{
s2
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c17
);
}
}
}
}
else
{
s1
=
peg$FAILED
;
}
if
(
s1
!==
peg$FAILED
)
{
peg$savedPos
=
s0
;
s1
=
peg$c18
();
}
s0
=
s1
;
peg$silentFails
--
;
if
(
s0
===
peg$FAILED
)
{
s1
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c15
);
}
}
return
s0
;
}
function
peg$parse_
()
{
var
s0
,
s1
;
peg$silentFails
++
;
s0
=
[];
if
(
peg$c20
.
test
(
input
.
charAt
(
peg$currPos
)))
{
s1
=
input
.
charAt
(
peg$currPos
);
peg$currPos
++
;
}
else
{
s1
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c21
);
}
}
while
(
s1
!==
peg$FAILED
)
{
s0
.
push
(
s1
);
if
(
peg$c20
.
test
(
input
.
charAt
(
peg$currPos
)))
{
s1
=
input
.
charAt
(
peg$currPos
);
peg$currPos
++
;
}
else
{
s1
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c21
);
}
}
}
peg$silentFails
--
;
if
(
s0
===
peg$FAILED
)
{
s1
=
peg$FAILED
;
if
(
peg$silentFails
===
0
)
{
peg$fail
(
peg$c19
);
}
}
return
s0
;
}
{
function
combine
(
first
,
rest
,
combiners
)
{
var
result
=
first
,
i
;
for
(
i
=
0
;
i
<
rest
.
length
;
i
++
)
{
result
=
combiners
[
rest
[
i
][
1
]](
result
,
rest
[
i
][
3
]);
}
return
result
;
}
}
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
({
type
:
"end"
,
description
:
"end of input"
});
}
throw
peg$buildException
(
null
,
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
)
);
}
}
exports
.
parse
=
peg$parse
;
return
exports
;
})();
;
Event Timeline
tstarling
edited the content of this paste.
(Show Details)
Jun 11 2015, 10:41 PM
2015-06-11 22:41:31 (UTC+0)
tstarling
changed the title of this paste from untitled to
Old backend
.
tstarling
updated the paste's language from
autodetect
to
js
.
Salgo60
mentioned this in
T201256: SOFI new register "name register"
.
Aug 13 2018, 1:18 PM
2018-08-13 13:18:01 (UTC+0)
Salgo60
mentioned this in
T227554: P777 Swedish civil parish code/ATA code need care
.
Jul 9 2019, 6:16 AM
2019-07-09 06:16:38 (UTC+0)
Log In to Comment