Compare commits
3 Commits
5f4bf60062
...
0d1f132379
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d1f132379 | |||
| dc557deb40 | |||
| ee0e6c6c41 |
|
|
@ -389,11 +389,7 @@ export class Compiler {
|
|||
return instructions
|
||||
}
|
||||
|
||||
case terms.MultiLineBlock:
|
||||
case terms.SingleLineBlock:
|
||||
case terms.ThenBlock:
|
||||
case terms.SingleLineThenBlock:
|
||||
case terms.TryBlock: {
|
||||
case terms.Block: {
|
||||
const children = getAllChildren(node)
|
||||
const instructions: ProgramItem[] = []
|
||||
|
||||
|
|
|
|||
|
|
@ -309,7 +309,7 @@ export const getDotGetParts = (node: SyntaxNode, input: string) => {
|
|||
export const getTryExprParts = (node: SyntaxNode, input: string) => {
|
||||
const children = getAllChildren(node)
|
||||
|
||||
// First child is always 'try' keyword, second is colon, third is TryBlock or statement
|
||||
// First child is always 'try' keyword, second is colon, third is Block or statement
|
||||
const [tryKeyword, _colon, tryBlock, ...rest] = children
|
||||
|
||||
if (!tryKeyword || !tryBlock) {
|
||||
|
|
|
|||
|
|
@ -25,9 +25,19 @@
|
|||
Underscore { "_" }
|
||||
Regex { "//" (![/\\\n[] | "\\" ![\n] | "[" (![\n\\\]] | "\\" ![\n])* "]")+ ("//" $[gimsuy]*)? } // Stolen from the lezer JavaScript grammar
|
||||
"|"[@name=operator]
|
||||
|
||||
}
|
||||
|
||||
end { @specialize[@name=keyword]<Identifier, "end"> }
|
||||
while { @specialize[@name=keyword]<Identifier, "while"> }
|
||||
if { @specialize[@name=keyword]<Identifier, "if"> }
|
||||
else { @specialize[@name=keyword]<Identifier, "else"> }
|
||||
elseif { @specialize[@name=keyword]<Identifier, "elseif"> }
|
||||
try { @specialize[@name=keyword]<Identifier, "try"> }
|
||||
catch { @specialize[@name=keyword]<Identifier, "catch"> }
|
||||
finally { @specialize[@name=keyword]<Identifier, "finally"> }
|
||||
throw { @specialize[@name=keyword]<Identifier, "throw"> }
|
||||
null { @specialize[@name=Null]<Identifier, "null"> }
|
||||
|
||||
@external tokens tokenizer from "./tokenizer" { Identifier, AssignableIdentifier, Word, IdentifierBeforeDot }
|
||||
@external specialize {Identifier} specializeKeyword from "./tokenizer" { Do }
|
||||
|
||||
|
|
@ -47,7 +57,6 @@ item {
|
|||
newlineOrSemicolon // allow blank lines
|
||||
}
|
||||
|
||||
|
||||
consumeToTerminator {
|
||||
PipeExpr |
|
||||
WhileExpr |
|
||||
|
|
@ -72,23 +81,11 @@ pipeOperand {
|
|||
}
|
||||
|
||||
WhileExpr {
|
||||
singleLineWhileExpr | multiLineWhileExpr
|
||||
while (ConditionalOp | expression) colon Block end
|
||||
}
|
||||
|
||||
SingleLineBlock {
|
||||
consumeToTerminator
|
||||
}
|
||||
|
||||
MultiLineBlock {
|
||||
block
|
||||
}
|
||||
|
||||
singleLineWhileExpr {
|
||||
@specialize[@name=keyword]<Identifier, "while"> (ConditionalOp | expression) colon SingleLineBlock @specialize[@name=keyword]<Identifier, "end">
|
||||
}
|
||||
|
||||
multiLineWhileExpr {
|
||||
@specialize[@name=keyword]<Identifier, "while"> (ConditionalOp | expression) colon newlineOrSemicolon MultiLineBlock @specialize[@name=keyword]<Identifier, "end">
|
||||
Block {
|
||||
consumeToTerminator | newlineOrSemicolon block
|
||||
}
|
||||
|
||||
FunctionCallOrIdentifier {
|
||||
|
|
@ -107,7 +104,6 @@ arg {
|
|||
PositionalArg | NamedArg
|
||||
}
|
||||
|
||||
|
||||
PositionalArg {
|
||||
expression | FunctionDef | Underscore
|
||||
}
|
||||
|
|
@ -117,71 +113,35 @@ NamedArg {
|
|||
}
|
||||
|
||||
FunctionDef {
|
||||
singleLineFunctionDef | multilineFunctionDef
|
||||
}
|
||||
|
||||
singleLineFunctionDef {
|
||||
Do Params colon consumeToTerminator CatchExpr? FinallyExpr? @specialize[@name=keyword]<Identifier, "end">
|
||||
}
|
||||
|
||||
multilineFunctionDef {
|
||||
Do Params colon newlineOrSemicolon block CatchExpr? FinallyExpr? @specialize[@name=keyword]<Identifier, "end">
|
||||
Do Params colon (consumeToTerminator | newlineOrSemicolon block) CatchExpr? FinallyExpr? end
|
||||
}
|
||||
|
||||
IfExpr {
|
||||
singleLineIf | multilineIf
|
||||
}
|
||||
|
||||
singleLineIf {
|
||||
@specialize[@name=keyword]<Identifier, "if"> (ConditionalOp | expression) colon SingleLineThenBlock @specialize[@name=keyword]<Identifier, "end">
|
||||
}
|
||||
|
||||
multilineIf {
|
||||
@specialize[@name=keyword]<Identifier, "if"> (ConditionalOp | expression) colon newlineOrSemicolon ThenBlock ElseIfExpr* ElseExpr? @specialize[@name=keyword]<Identifier, "end">
|
||||
if (ConditionalOp | expression) colon Block ElseIfExpr* ElseExpr? end
|
||||
}
|
||||
|
||||
ElseIfExpr {
|
||||
@specialize[@name=keyword]<Identifier, "elseif"> (ConditionalOp | expression) colon newlineOrSemicolon ThenBlock
|
||||
elseif (ConditionalOp | expression) colon Block
|
||||
}
|
||||
|
||||
ElseExpr {
|
||||
@specialize[@name=keyword]<Identifier, "else"> colon newlineOrSemicolon ThenBlock
|
||||
}
|
||||
|
||||
ThenBlock {
|
||||
block
|
||||
}
|
||||
|
||||
SingleLineThenBlock {
|
||||
consumeToTerminator
|
||||
else colon Block
|
||||
}
|
||||
|
||||
TryExpr {
|
||||
singleLineTry | multilineTry
|
||||
}
|
||||
|
||||
singleLineTry {
|
||||
@specialize[@name=keyword]<Identifier, "try"> colon consumeToTerminator CatchExpr? FinallyExpr? @specialize[@name=keyword]<Identifier, "end">
|
||||
}
|
||||
|
||||
multilineTry {
|
||||
@specialize[@name=keyword]<Identifier, "try"> colon newlineOrSemicolon TryBlock CatchExpr? FinallyExpr? @specialize[@name=keyword]<Identifier, "end">
|
||||
try colon Block CatchExpr? FinallyExpr? end
|
||||
}
|
||||
|
||||
CatchExpr {
|
||||
@specialize[@name=keyword]<Identifier, "catch"> Identifier colon (newlineOrSemicolon TryBlock | consumeToTerminator)
|
||||
catch Identifier colon Block
|
||||
}
|
||||
|
||||
FinallyExpr {
|
||||
@specialize[@name=keyword]<Identifier, "finally"> colon (newlineOrSemicolon TryBlock | consumeToTerminator)
|
||||
}
|
||||
|
||||
TryBlock {
|
||||
block
|
||||
finally colon Block
|
||||
}
|
||||
|
||||
Throw {
|
||||
@specialize[@name=keyword]<Identifier, "throw"> (BinOp | ConditionalOp | expression)
|
||||
throw (BinOp | ConditionalOp | expression)
|
||||
}
|
||||
|
||||
ConditionalOp {
|
||||
|
|
@ -200,7 +160,7 @@ Params {
|
|||
}
|
||||
|
||||
NamedParam {
|
||||
NamedArgPrefix (String | Number | Boolean | @specialize[@name=Null]<Identifier, "null">)
|
||||
NamedArgPrefix (String | Number | Boolean | null)
|
||||
}
|
||||
|
||||
Assign {
|
||||
|
|
@ -238,7 +198,6 @@ expression {
|
|||
}
|
||||
|
||||
String { "'" stringContent* "'" }
|
||||
|
||||
}
|
||||
|
||||
stringContent {
|
||||
|
|
@ -274,7 +233,7 @@ Array {
|
|||
// to go through ambiguousFunctionCall (which is what we want semantically).
|
||||
// Yes, it is annoying and I gave up trying to use GLR to fix it.
|
||||
expressionWithoutIdentifier {
|
||||
ParenExpr | Word | String | Number | Boolean | Regex | Dict | Array | @specialize[@name=Null]<Identifier, "null">
|
||||
ParenExpr | Word | String | Number | Boolean | Regex | Dict | Array | null
|
||||
}
|
||||
|
||||
block {
|
||||
|
|
|
|||
|
|
@ -47,22 +47,18 @@ export const
|
|||
Null = 45,
|
||||
colon = 46,
|
||||
CatchExpr = 47,
|
||||
keyword = 73,
|
||||
TryBlock = 49,
|
||||
keyword = 69,
|
||||
Block = 49,
|
||||
FinallyExpr = 50,
|
||||
Underscore = 53,
|
||||
Array = 54,
|
||||
ConditionalOp = 55,
|
||||
PositionalArg = 56,
|
||||
WhileExpr = 58,
|
||||
SingleLineBlock = 60,
|
||||
MultiLineBlock = 61,
|
||||
TryExpr = 62,
|
||||
Throw = 64,
|
||||
IfExpr = 66,
|
||||
SingleLineThenBlock = 68,
|
||||
ThenBlock = 69,
|
||||
ElseIfExpr = 70,
|
||||
ElseExpr = 72,
|
||||
CompoundAssign = 74,
|
||||
Assign = 75
|
||||
TryExpr = 60,
|
||||
Throw = 62,
|
||||
IfExpr = 64,
|
||||
ElseIfExpr = 66,
|
||||
ElseExpr = 68,
|
||||
CompoundAssign = 70,
|
||||
Assign = 71
|
||||
|
|
|
|||
|
|
@ -4,14 +4,14 @@ import {operatorTokenizer} from "./operatorTokenizer"
|
|||
import {tokenizer, specializeKeyword} from "./tokenizer"
|
||||
import {trackScope} from "./scopeTracker"
|
||||
import {highlighting} from "./highlight"
|
||||
const spec_Identifier = {__proto__:null,null:90, catch:96, finally:102, end:104, while:118, try:126, throw:130, if:134, elseif:142, else:146}
|
||||
const spec_Identifier = {__proto__:null,null:90, catch:96, finally:102, end:104, while:118, try:122, throw:126, if:130, elseif:134, else:138}
|
||||
export const parser = LRParser.deserialize({
|
||||
version: 14,
|
||||
states: ";lQYQbOOO#wQcO'#C{O$tOSO'#C}O%SQbO'#ElOOQ`'#DW'#DWOOQa'#DT'#DTO&YQbO'#DdO'kQcO'#EaOOQa'#Ea'#EaO(nQcO'#EaO)pQcO'#E`O*TQRO'#C|O+aQcO'#E[O+qQcO'#E[O+{QbO'#CzO,sOpO'#CxOOQ`'#E]'#E]O,xQbO'#E[O-PQbO'#ErOOQ`'#Dh'#DhO-tQQO'#EtOOQ`'#Dl'#DlO-PQbO'#DnO-PQbO'#EvOOQ`'#Dp'#DpO-yQRO'#DxOOQ`'#E['#E[O._QQO'#EZOOQ`'#EZ'#EZOOQ`'#Dz'#DzQYQbOOO.gQbO'#DUOOQa'#E`'#E`OOQ`'#Df'#DfOOQ`'#Eq'#EqOOQ`'#ES'#ESO.qQbO,59cO/eQbO'#DPO/mQWO'#DQOOOO'#Ec'#EcOOOO'#D{'#D{O0ROSO,59iOOQa,59i,59iOOQ`'#D}'#D}O0aQbO'#DXO0lQbO'#DYOOQO'#EO'#EOO0dQQO'#DXO0zQQO,5;WOOQ`'#D|'#D|O1PQbO,5:OO1WQQO,59oOOQa,5:O,5:OO1cQbO,5:OO1mQbO,5:eO-PQbO,59hO-PQbO,59hO-PQbO,59hO-PQbO,5:PO-PQbO,5:PO-PQbO,5:PO2QQRO,59fO2XQRO,59fO2jQRO,59fO2eQQO,59fO2uQQO,59fO2}ObO,59dO3YQbO'#ETO3eQbO,59bO4hQRO,5;^O4oQRO,5;^O4zQbO,5;`O5bQcO,5:YO6WQcO,5:YO6hQcO,5:YO6rQRO,5;bO6yQRO,5;bO1mQbO,5:dOOQ`,5:u,5:uOOQ`-E7x-E7xOOQ`,59p,59pOOQ`-E8Q-E8QOOOO,59k,59kOOOO,59l,59lOOOO-E7y-E7yOOQa1G/T1G/TOOQ`-E7{-E7{O7UQQO,59sOOQO,59t,59tOOQO-E7|-E7|O7^QbO1G0rOOQ`-E7z-E7zO7tQQO1G/ZOOQa1G/j1G/jO8PQbO1G/jOOQO'#EQ'#EQO7tQQO1G/ZOOQa1G/Z1G/ZOOQ`'#ER'#ERO8PQbO1G/jOOQ`1G0P1G0POOQa1G/S1G/SO8xQcO1G/SO9SQcO1G/SO9^QcO1G/SOOQa1G/k1G/kO:|QcO1G/kO;TQcO1G/kO;[QcO1G/kOOQa1G/Q1G/QOOQa1G/O1G/OO!dQbO'#C{O;cQbO'#CwOOQ`,5:o,5:oOOQ`-E8R-E8RO;pQbO1G0xO<WQbO1G0zO<cQbO1G0{O=SQbO1G0|OOQ`1G0O1G0OO=jQbO7+&^O<cQbO7+&`O=uQQO7+$uOOQa7+$u7+$uO>QQbO7+%UOOQa7+%U7+%UOOQO-E8O-E8OOOQ`-E8P-E8POOQ`'#Dj'#DjO>[QbO7+&dO>aQbO7+&eO>zQbO'#D]O?PQQO'#D`OOQ`7+&f7+&fO?UQbO7+&fO?ZQbO7+&fOOQ`'#EP'#EPO?cQQO'#EPO?hQbO'#EmOOQ`'#D_'#D_O@_QbO7+&gOOQ`'#Dr'#DrO@jQbO7+&hO@oQbO7+&iOOQ`<<Ix<<IxOA`QbO<<IxOAeQbO<<IxOAmQbO<<IzOOQa<<Ha<<HaOOQa<<Hp<<HpOOQ`<<JO<<JOOOQ`'#Dk'#DkOAxQbO<<JPOA}QQO,59wOBSQbO,59zOOQ`<<JQ<<JQOBjQbO<<JQOOQ`,5:k,5:kOOQ`-E7}-E7}OOQ`<<JR<<JROBoQbO<<JROBtQbO<<JROOQ`<<JS<<JSOOQ`'#Ds'#DsOB|QbO<<JTOOQ`AN?dAN?dOCXQbOAN?dOOQ`AN?fAN?fOC^QbOAN?fOCcQbOAN?fOOQ`AN?kAN?kOCkQbO1G/cO>aQbO1G/fOOQ`1G/f1G/fOOQ`AN?lAN?lOOQ`AN?mAN?mODRQbOAN?mO-PQbO'#DtOOQ`'#EU'#EUODWQbOAN?oODcQQO'#DvOOQ`AN?oAN?oODhQbOAN?oOOQ`G25OG25OOOQ`G25QG25QODmQbOG25QODrQbO7+$}OOQ`7+$}7+$}OOQ`7+%Q7+%QOOQ`G25XG25XOE`QRO,5:`OEgQRO,5:`OOQ`-E8S-E8SOOQ`G25ZG25ZOErQbOG25ZOEwQQO,5:bOOQ`LD*lLD*lOOQ`<<Hi<<HiOE|QQO1G/zOOQ`LD*uLD*uO>aQbO1G/|O@oQbO7+%fOOQ`7+%h7+%hOOQ`<<IQ<<IQ",
|
||||
stateData: "FU~O!{OS!|OS~OdPOeiOfWOg_OhROmWOuWOvWO}WO!]bO!adO!cfO!egO#R^O#UQO#]TO#^UO#_lO~OdpOfWOg_OhROmWOuWOvWOyoO}WO!VqO#R^O#UQO#]TO#^UO!ZoX#_oX#loX#doX!QoX!ToX!UoX~OP#SXQ#SXR#SXS#SXT#SXU#SXW#SXX#SXY#SXZ#SX[#SX]#SX^#SX~P!dOrwO#UzO#WuO#XvO~Od{Oy}O!O{P~OdpOfWOg_OmWOuWOvWOyoO}WO#R^O#UQO#]TO#^UO#_!RO~O#c!UO~P%_OP#TXQ#TXR#TXS#TXT#TXU#TXW#TXX#TXY#TXZ#TX[#TX]#TX^#TX#_#TX#l#TX!Q#TX!T#TX!U#TX~OdpOfWOg_OhROmWOuWOvWOyoO}WO!VqO#R^O#UQO#]TO#^UO#d#TX~P&aOV!WO~P&aOP#SXQ#SXR#SXS#SXT#SXU#SXW#SXX#SXY#SXZ#SX[#SX]#SX^#SX~O#_#OX#l#OX!Q#OX!T#OX!U#OX~P(uOP!YOQ!YOR!ZOS!ZOT!]OU!^OW![OX![OY![OZ![O[![O]![O^!XO~O#_#OX#l#OX!Q#OX!T#OX!U#OX~OP!YOQ!YOR!ZOS!ZO~P+OOT!]OU!^O~P+OOdPOfWOg_OhROmWOuWOvWO}WO#R^O#UQO#]TO#^UO~O#Q!dO~O!Z!eO~P+OOdpOfWOg_OmWOuWOvWO}WO#R^O#UQO#]TO#^UO~O!O!iO~OV!WO_!oO`!oOa!oOb!oOc!oO~O#_!pO#l!pO~OhRO!V!rO~P-POhROyoO!VqO!Zka#_ka#lka#dka!Qka!Tka!Uka~P-POd!tO#R^O~O#U!uO#W!uO#X!uO#Y!uO#Z!uO#[!uO~OrwO#U!wO#WuO#XvO~Od{Oy}O!O{X~Om!zOu!zO}!zO#UQO~O!O!|O~O#c#PO~P%_OyoO#_#RO#c#TO~O#_#UO#c#PO~P-POeiO!]bO!adO!cfO!egO~P+{O#d#aO~P(uOP!YOQ!YOR!ZOS!ZO#d#aO~OT!]OU!^O#d#aO~O!Z!eO#d#aO~Od#bOm#bO#R^O~Od#cOg_O#R^O~O!Z!eO#_ja#lja#dja!Qja!Tja!Uja~OT!]OU!^OW![OX![OY![OZ![O[![O]![O~O!O#gO~P3|OT!]OU!^O!O#gO~OeiO!]bO!adO!cfO!egO#_#iO~P+{O#_!ba#l!ba!Q!ba!T!ba!U!ba~P*TO#_!ba#l!ba!Q!ba!T!ba!U!ba~OP!YOQ!YOR!ZOS!ZO~P5uOT!]OU!^O~P5uO!O#jO~P3|OT!]OU!^O!O#jO~Oy}O!O{a~OeiO!]bO!adO!cfO!egO#_#mO~P+{OyoO#_#RO#c#oO~O#_#UO#c#qO~P-PO^!XORpiSpi#_pi#lpi#dpi!Qpi!Tpi!Upi~OPpiQpi~P8ZOP!YOQ!YO~P8ZOP!YOQ!YORpiSpi#_pi#lpi#dpi!Qpi!Tpi!Upi~OW![OX![OY![OZ![O[![O]![OT!Xi#_!Xi#l!Xi#d!Xi!O!Xi!Q!Xi!T!Xi!U!Xi~OU!^O~P:OOU!^O~P:bOU!Xi~P:OOhROyoO!VqO~P-POeiO!]bO!adO!cfO!egO#_#vO~P+{O!Q#wO!T#xO!U#yO~OeiO!]bO!adO!cfO!egO#_#|O!Q#aP!T#aP!U#aP~P+{OeiO!]bO!adO!cfO!egO#_$TO~P+{O!Q#wO!T#xO!U$UO~OyoO#_#RO#c$YO~O#_#UO#c$ZO~P-PO!U$[O~OeiO!]bO!adO!cfO!egO#_#|O!U#aP~P+{Od$_O~O!O$`O~O!U$aO~O!T#xO!U$aO~O#_$cO~OeiO!]bO!adO!cfO!egO#_#|O!Q#aX!T#aX!U#aX!i#aX!k#aX~P+{O!Q#wO!T#xO!U$eO~O!U$hO~OeiO!]bO!adO!cfO!egO#_#|O!U#aP!i#aP!k#aP~P+{O!U$kO~O!T#xO!U$kO~O!Q#wO!T#xO!U$mO~O!U$pO~O!O$qO~OeiO!]bO!adO!cfO!egO#_$rO~P+{O!U$tO~O!U$uO~O!T#xO!U$uO~O!U${O!i$wO!k$zO~O!U$}O~O!U%OO~O!T#xO!U%OO~OeiO!]bO!adO!cfO!egO#_%QO~P+{O!U%TO~O!U%XO!i$wO!k$zO~O!O%ZO~O!U%XO~O!U%[O~OeiO!]bO!adO!cfO!egO#_#|O!T#aP!U#aP~P+{O!O%^O~P3|OT!]OU!^O!O%^O~O!U%_O~O#_%`O~O#_%aO~Omv~",
|
||||
goto: "7v#lPPPPPPPPPPPPPPPPPPPPPPPPPP#m$V$nP%q$V&z'mP(n(nPP(r)pP*T*w*zPP+QP+^+gPPP,P-P-{P.SP.i.l.SP.SP.SP.o.r.{P/PP.S.S/V/]/c/i/o/y0W0b0l0u0|PPPP1S1W2PPP2l4YP5[PPPPPPPP5`5|5`PP6^6e6e6z6z7a7avjOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aR!b^{`O^n!W!e!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%axPO^n!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%a|pPUVbfgot!S!V!X!Y!Z![!]!^#Q#V#c#d#p$wR#c!exVO^n!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%a|WPUVbfgot!S!V!X!Y!Z![!]!^#Q#V#c#d#p$wQ!tuQ#b!dR#d!ev[On!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aQ!`^Q!kfQ#X!YR#[!Z!vWOPUV^bfgnot!S!V!W!X!Y!Z![!]!^!i!o!|#Q#V#c#d#g#i#j#m#p#v$O$T$`$q$r$w%Q%`%aR!z}TwQy!wWOPUV^bfgnot!S!V!W!X!Y!Z![!]!^!i!o!|#Q#V#c#d#g#i#j#m#p#v$O$T$`$q$r$w%Q%`%aYrPVt#c#dQ!TUQ#O!SX#R!T#O#S#nvjOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aYqPVt#c#dQ!b^R!roR!QRX!OR|!P!yQ#{#hQ$W#lQ$g$QR$o$XQ$Q#iQ%S$rR%]%QQ#z#hQ$V#lQ$b#{Q$f$QQ$l$WQ$n$XQ$v$gR%P$o!OWPUV^bfgot!S!V!X!Y!Z![!]!^#Q#V#c#d#p$wwXOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%av]On!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aQ!a^Q!hbQ!lfQ!ngQ#]!^Q#_!]R%V$wZrPVt#c#dwjOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aR#u#gR$^#vR$S#jQ$j$TQ%b%`R%c%aT$x$j$yQ$|$jR%Y$yQnOR!qnQyQR!vyQ!SUR!}!SQ|RR!x|Q!PRQ!y|T!{!P!y`$O#i#m#v$T$r%Q%`%aR$d$OQ#S!TQ#n#OT#r#S#nQ#V!VQ#p#QT#s#V#pWtPV#c#dR!stS!fa!cR#f!fQ$y$jR%W$yTmOnSkOnQ#W!WQ#h!iQ#k!oQ#l!|Q#t#gb#}#i#m#v$O$T$r%Q%`%aQ$R#jQ$s$`R%R$qvaOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aQ!c^R#e!exZO^n!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aYqPVt#c#dQ!VUQ!gbQ!jfQ!mgQ!roQ#Q!SW#U!V#Q#V#pQ#X!XQ#Y!YQ#Z!ZQ#]![Q#^!]Q#`!^R%U$wvYOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%a|pPUVbfgot!S!V!X!Y!Z![!]!^#Q#V#c#d#p$wR!_^TxQy!VSOPV^not!W!i!o!|#c#d#g#i#j#m#v$O$T$`$q$r%Q%`%aU$P#i$r%QQ$X#mQ$]#vV$i$T%`%aZsPVt#c#dwcOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%aweOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%awhOn!W!i!o!|#g#i#j#m#v$O$T$`$q$r%Q%`%a",
|
||||
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Identifier AssignableIdentifier Word IdentifierBeforeDot Do Program PipeExpr FunctionCall DotGet Number ParenExpr FunctionCallOrIdentifier BinOp String StringFragment Interpolation EscapeSeq Boolean Regex Dict NamedArg NamedArgPrefix FunctionDef Params NamedParam Null colon CatchExpr keyword TryBlock FinallyExpr keyword keyword Underscore Array ConditionalOp PositionalArg operator WhileExpr keyword SingleLineBlock MultiLineBlock TryExpr keyword Throw keyword IfExpr keyword SingleLineThenBlock ThenBlock ElseIfExpr keyword ElseExpr keyword CompoundAssign Assign",
|
||||
maxTerm: 120,
|
||||
states: "7vQYQbOOO#}QcO'#C{O$zOSO'#C}OOQa'#DT'#DTO&TQbO'#DdO'lQcO'#E]OOQa'#E]'#E]O(oQcO'#E]O)qQcO'#E[O*[QRO'#C|O+nQcO'#EWO,OQcO'#EWO,YQbO'#CzO-QOpO'#CxOOQ`'#EX'#EXO-VQbO'#EWO-^QRO'#DtOOQ`'#EW'#EWO-rQQO'#EVOOQ`'#EV'#EVOOQ`'#Dv'#DvQYQbOOO-zQbO'#DWO.VQbO'#DhO.zQQO'#DjO.VQbO'#DlO.VQbO'#DnO/PQbO'#DUOOQa'#E['#E[OOQ`'#Df'#DfOOQ`'#Ek'#EkOOQ`'#EO'#EOO/ZQbO,59cO0TQbO'#DPO0]QWO'#DQOOOO'#E_'#E_OOOO'#Dw'#DwO0qOSO,59iOOQa,59i,59iOOQ`'#Dx'#DxO1PQbO,5:OO1WQQO,59oOOQa,5:O,5:OO1cQbO,5:OO1mQbO,5:aO.VQbO,59hO.VQbO,59hO.VQbO,59hO.VQbO,5:PO.VQbO,5:PO.VQbO,5:PO2QQRO,59fO2XQRO,59fO2jQRO,59fO2eQQO,59fO2uQQO,59fO2}ObO,59dO3YQbO'#EPO3eQbO,59bO1mQbO,5:`OOQ`,5:q,5:qOOQ`-E7t-E7tOOQ`'#Dy'#DyO4SQbO'#DXO4_QbO'#DYOOQO'#Dz'#DzO4VQQO'#DXO4mQQO,59rO5^QRO,5:SO5eQRO,5:SO5pQbO,5:UO6WQcO,5:WO7YQcO,5:WO7jQcO,5:WO7tQRO,5:YO7{QRO,5:YOOQ`,59p,59pOOQ`-E7|-E7|OOOO,59k,59kOOOO,59l,59lOOOO-E7u-E7uOOQa1G/T1G/TOOQ`-E7v-E7vO8WQQO1G/ZOOQa1G/j1G/jO8cQbO1G/jOOQO'#D|'#D|O8WQQO1G/ZOOQa1G/Z1G/ZOOQ`'#D}'#D}O8cQbO1G/jOOQ`1G/{1G/{OOQa1G/S1G/SO9bQcO1G/SO9lQcO1G/SO9vQcO1G/SOOQa1G/k1G/kO;rQcO1G/kO;yQcO1G/kO<QQcO1G/kOOQa1G/Q1G/QOOQa1G/O1G/OO!dQbO'#C{O<XQbO'#CwOOQ`,5:k,5:kOOQ`-E7}-E7}OOQ`1G/z1G/zOOQ`-E7w-E7wO<fQQO,59sOOQO,59t,59tOOQO-E7x-E7xO<nQbO1G/^O5pQbO1G/nOOQ`'#D_'#D_O=UQbO'#D_O={QbO1G/pO5pQbO1G/tO>WQQO7+$uOOQa7+$u7+$uO>cQbO7+%UOOQa7+%U7+%UOOQO-E7z-E7zOOQ`-E7{-E7{O>mQbO7+$xO>xQbO7+$xO?iQbO7+%YOOQ`'#D{'#D{O?nQQO'#D{O?sQbO'#EhOOQ`,59y,59yO@jQbO'#D]O@oQQO'#D`OOQ`7+%[7+%[O@tQbO7+%[O@yQbO7+%[OARQbO7+%`OOQa<<Ha<<HaOOQa<<Hp<<HpOOQ`<<Hd<<HdOA^QbO<<HdOAcQbO<<HdOAkQbO<<HdOOQ`<<Ht<<HtOOQ`,5:g,5:gOOQ`-E7y-E7yOAvQQO,59wO5pQbO,59zOOQ`<<Hv<<HvOA{QbO<<HvOOQ`'#EQ'#EQOBQQbO<<HzO.VQbO'#DpOB]QQO'#DrOOQ`<<Hz<<HzOBbQbO<<HzOOQ`AN>OAN>OOBgQbOAN>OOBlQbOAN>OO5pQbO1G/cOOQ`1G/f1G/fOOQ`AN>bAN>bOOQ`-E8O-E8OOOQ`AN>fAN>fOBtQbOAN>fOByQRO,5:[OCQQRO,5:[O5pQbO,5:^OOQ`G23jG23jOC]QbOG23jOOQ`7+$}7+$}OOQ`G24QG24QO5pQbO1G/vOOQ`1G/x1G/xOOQ`LD)ULD)UOOQ`7+%b7+%b",
|
||||
stateData: "Ce~O!wOS!xOS~OdPOe`OfUOg]OhfOmUOuUOvUO}UO!]gO!_hO!aiO!cjO!}[O#QQO#XRO#YSO#ZcO~OdlOfUOg]OhfOmUOuUOvUOykO}UO!VmO!}[O#QQO#XRO#YSO!ZoX#ZoX#`oX#^oX!QoX!ToX!UoX!eoX!goX~OP#OXQ#OXR#OXS#OXT#OXU#OXW#OXX#OXY#OXZ#OX[#OX]#OX^#OX~P!dOrsO#QvO#SqO#TrO~OdlOfUOg]OmUOuUOvUOykO}UO!}[O#QQO#XRO#YSO#ZwO~O#]zO~P%YOP#PXQ#PXR#PXS#PXT#PXU#PXW#PXX#PXY#PXZ#PX[#PX]#PX^#PX#Z#PX#`#PX!Q#PX!T#PX!U#PX!e#PX!g#PX~OdlOfUOg]OhfOmUOuUOvUOykO}UO!VmO!}[O#QQO#XRO#YSO#^#PX~P&[OV|O~P&[OP#OXQ#OXR#OXS#OXT#OXU#OXW#OXX#OXY#OXZ#OX[#OX]#OX^#OX~O#Z!zX#`!zX!Q!zX!T!zX!U!zX!e!zX!g!zX~P(vOP!OOQ!OOR!POS!POT!ROU!SOW!QOX!QOY!QOZ!QO[!QO]!QO^}O~O#Z!zX#`!zX!Q!zX!T!zX!U!zX!e!zX!g!zX~OP!OOQ!OOR!POS!PO~P+VOT!ROU!SO~P+VOdPOfUOg]OhfOmUOuUOvUO}UO!}[O#QQO#XRO#YSO~O!|!YO~O!Z!ZO~P+VOV|O_!]O`!]Oa!]Ob!]Oc!]O~O#Z!^O#`!^O~Od!`Oy!bO!O{P~OdlOfUOg]OmUOuUOvUO}UO!}[O#QQO#XRO#YSO~O!O!hO~OhfO!V!nO~P.VOhfOykO!VmO!Zka#Zka#`ka#^ka!Qka!Tka!Uka!eka!gka~P.VOd!pO!}[O~O#Q!qO#S!qO#T!qO#U!qO#V!qO#W!qO~OrsO#Q!sO#SqO#TrO~O#]!vO~P%YOykO#Z!xO#]!zO~O#Z!{O#]!vO~P.VOe`O!]gO!_hO!aiO!cjO~P,YO#^#WO~P(vOP!OOQ!OOR!POS!PO#^#WO~OT!ROU!SO#^#WO~O!Z!ZO#^#WO~Od#XOm#XO!}[O~Od#YOg]O!}[O~O!Z!ZO#Zja#`ja#^ja!Qja!Tja!Uja!eja!gja~Od!`Oy!bO!O{X~Om#aOu#aO}#aO#QQO~O!O#cO~OT!ROU!SOW!QOX!QOY!QOZ!QO[!QO]!QO~O!O#dO~P4rOT!ROU!SO!O#dO~Oe`O!]gO!_hO!aiO!cjO#Z#fO~P,YO#Z!`a#`!`a!Q!`a!T!`a!U!`a!e!`a!g!`a~P*[O#Z!`a#`!`a!Q!`a!T!`a!U!`a!e!`a!g!`a~OP!OOQ!OOR!POS!PO~P6qOT!ROU!SO~P6qO!O#hO~P4rOT!ROU!SO!O#hO~OykO#Z!xO#]#jO~O#Z!{O#]#lO~P.VO^}ORpiSpi#Zpi#`pi#^pi!Qpi!Tpi!Upi!epi!gpi~OPpiQpi~P8mOP!OOQ!OO~P8mOP!OOQ!OORpiSpi#Zpi#`pi#^pi!Qpi!Tpi!Upi!epi!gpi~OW!QOX!QOY!QOZ!QO[!QO]!QOT!Xi#Z!Xi#`!Xi#^!Xi!O!Xi!Q!Xi!T!Xi!U!Xi!e!Xi!g!Xi~OU!SO~P:nOU!SO~P;QOU!Xi~P:nOhfOykO!VmO~P.VOy!bO!O{a~Oe`O!]gO!_hO!aiO!cjO#Z#pO~P,YOe`O!]gO!_hO!aiO!cjO#Z#rO!Q#[P!T#[P!U#[P!e#[P!g#[P~P,YO!Q#vO!T#wO!U#xO~OykO#Z!xO#]#|O~O#Z!{O#]#}O~P.VO!Q#vO!T#wO!U$OO~Oe`O!]gO!_hO!aiO!cjO#Z#rO!Q#[P!T#[P!U#[P~P,YO!U$SO~O#Z$TO~Oe`O!]gO!_hO!aiO!cjO#Z#rO!Q#[X!T#[X!U#[X!e#[X!g#[X~P,YOd$VO~O!O$WO~O!U$XO~O!T#wO!U$XO~O!U$_O!e$]O!g$^O~O!U$aO~O!T#wO!U$aO~O!Q#vO!T#wO!U$aO~O!O$dO~O!U$fO~O!U$hO!e$]O!g$^O~O!O$lO~O!U$hO~O!U$mO~O!T#wO!U$mO~O!U$pO~O!O$qO~P4rOT!ROU!SO!O$qO~O!U$sO~Omv~",
|
||||
goto: "3b#`PPPPPPPPPPPPPPPPPPPPPPPPPP#a#u$YP%X#u&^&{P'x'xPP'|(vP)Z)y)|PP*SP*]*rPPP+S,O,vP,}P,}P,}P,}P-`P-dP,},}-j-p-v-|.S.^.e.o.y/S/ZPPPP/a/e0QPP0i2RP3PPPPPPPPP3TPP3ZnaOe|!]!h#c#d#f#h#p#t$W$d$l$qR!W[s^O[e|!Z!]!h#c#d#f#h#p#t$W$d$l$qpPO[e|!]!h#c#d#f#h#p#t$W$d$l$q|lPSTgijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]R#Y!ZpTO[e|!]!h#c#d#f#h#p#t$W$d$l$q|UPSTgijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]Q!pqQ#X!YR#Z!ZnYOe|!]!h#c#d#f#h#p#t$W$d$l$qQ!U[Q!jiQ#O!OR#R!P!nUOPST[egijkpx{|}!O!P!Q!R!S!]!h!w!|#Y#Z#c#d#f#h#k#p#t$W$]$d$l$qR#a!bTsQu!oUOPST[egijkpx{|}!O!P!Q!R!S!]!h!w!|#Y#Z#c#d#f#h#k#p#t$W$]$d$l$qYnPTp#Y#ZQySQ!uxX!xy!u!y#inaOe|!]!h#c#d#f#h#p#t$W$d$l$qYmPTp#Y#ZQ!W[R!nkR!efX!cf!a!d#`Q#z#gQ$Q#oR$c$RQ#g!hQ#q#dQ#{#hQ$e$WQ$o$dQ$r$lR$t$qQ#y#gQ$P#oQ$Y#zS$b$Q$RR$n$c!OUPST[gijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]oVOe|!]!h#c#d#f#h#p#t$W$d$l$qnZOe|!]!h#c#d#f#h#p#t$W$d$l$qQ!V[Q!ggQ!kiQ!mjQ#S!SQ#U!RR$k$]ZnPTp#Y#ZoaOe|!]!h#c#d#f#h#p#t$W$d$l$qT$Z#{$[Q$`#{R$i$[QeOR!_eQuQR!ruQxSR!txQ!afR#_!aQ!dfQ#`!aT#b!d#`S#t#f#pR$U#tQ!yyQ#i!uT#m!y#iQ!|{Q#k!wT#n!|#kWpPT#Y#ZR!opS![_!XR#]![Q$[#{R$g$[TdOeSbOeQ!}|Q#^!]^#e!h#d#h$W$d$l$qQ#o#cV#s#f#p#tn_Oe|!]!h#c#d#f#h#p#t$W$d$l$qQ!X[R#[!ZpXO[e|!]!h#c#d#f#h#p#t$W$d$l$qYmPTp#Y#ZQ{SQ!fgQ!iiQ!ljQ!nkQ!wxW!{{!w!|#kQ#O}Q#P!OQ#Q!PQ#S!QQ#T!RQ#V!SR$j$]nWOe|!]!h#c#d#f#h#p#t$W$d$l$q|lPSTgijkpx{}!O!P!Q!R!S!w!|#Y#Z#k$]R!T[TtQuQ#u#fR$R#pZoPTp#Y#Z",
|
||||
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo PlusEq MinusEq StarEq SlashEq ModuloEq Identifier AssignableIdentifier Word IdentifierBeforeDot Do Program PipeExpr FunctionCall DotGet Number ParenExpr FunctionCallOrIdentifier BinOp String StringFragment Interpolation EscapeSeq Boolean Regex Dict NamedArg NamedArgPrefix FunctionDef Params NamedParam Null colon CatchExpr keyword Block FinallyExpr keyword keyword Underscore Array ConditionalOp PositionalArg operator WhileExpr keyword TryExpr keyword Throw keyword IfExpr keyword ElseIfExpr keyword ElseExpr keyword CompoundAssign Assign",
|
||||
maxTerm: 108,
|
||||
context: trackScope,
|
||||
nodeProps: [
|
||||
["closedBy", 46,"end"]
|
||||
|
|
@ -19,9 +19,9 @@ export const parser = LRParser.deserialize({
|
|||
propSources: [highlighting],
|
||||
skippedNodes: [0],
|
||||
repeatNodeCount: 11,
|
||||
tokenData: "C_~R|OX#{XY$jYZ%TZp#{pq$jqs#{st%ntu'Vuw#{wx'[xy'ayz'zz{#{{|(e|}#{}!O+X!O!P#{!P!Q-n!Q![)S![!]6Z!]!^%T!^!}#{!}#O6t#O#P8j#P#Q8o#Q#R#{#R#S9Y#S#T#{#T#Y,Y#Y#Z9s#Z#b,Y#b#c>q#c#f,Y#f#g?n#g#h,Y#h#i@k#i#o,Y#o#p#{#p#qBo#q;'S#{;'S;=`$d<%l~#{~O#{~~CYS$QUrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{S$gP;=`<%l#{^$qUrS!{YOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U%[UrS#_QOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{^%uZrS!|YOY%nYZ#{Zt%ntu&huw%nwx&hx#O%n#O#P&h#P;'S%n;'S;=`'P<%lO%nY&mS!|YOY&hZ;'S&h;'S;=`&y<%lO&hY&|P;=`<%l&h^'SP;=`<%l%n~'[O#W~~'aO#U~U'hUrS#RQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(RUrS#dQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(jWrSOt#{uw#{x!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U)ZYrSmQOt#{uw#{x!O#{!O!P)y!P!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U*OWrSOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U*oWrSmQOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U+^^rSOt#{uw#{x}#{}!O,Y!O!Q#{!Q![)S![!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U,_[rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U-[UyQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U-sWrSOt#{uw#{x!P#{!P!Q.]!Q#O#{#P;'S#{;'S;=`$d<%lO#{U.b^rSOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q#{!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^U/e^rSvQOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q3U!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^Q0fXvQOY0aZ!P0a!P!Q1R!Q!}0a!}#O1p#O#P2o#P;'S0a;'S;=`3O<%lO0aQ1UP!P!Q1XQ1^UvQ#Z#[1X#]#^1X#a#b1X#g#h1X#i#j1X#m#n1XQ1sVOY1pZ#O1p#O#P2Y#P#Q0a#Q;'S1p;'S;=`2i<%lO1pQ2]SOY1pZ;'S1p;'S;=`2i<%lO1pQ2lP;=`<%l1pQ2rSOY0aZ;'S0a;'S;=`3O<%lO0aQ3RP;=`<%l0aU3ZWrSOt#{uw#{x!P#{!P!Q3s!Q#O#{#P;'S#{;'S;=`$d<%lO#{U3zbrSvQOt#{uw#{x#O#{#P#Z#{#Z#[3s#[#]#{#]#^3s#^#a#{#a#b3s#b#g#{#g#h3s#h#i#{#i#j3s#j#m#{#m#n3s#n;'S#{;'S;=`$d<%lO#{U5X[rSOY5SYZ#{Zt5Stu1puw5Swx1px#O5S#O#P2Y#P#Q/^#Q;'S5S;'S;=`5}<%lO5SU6QP;=`<%l5SU6WP;=`<%l/^U6bUrS!OQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U6{W#^QrSOt#{uw#{x!_#{!_!`7e!`#O#{#P;'S#{;'S;=`$d<%lO#{U7jVrSOt#{uw#{x#O#{#P#Q8P#Q;'S#{;'S;=`$d<%lO#{U8WU#]QrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~8oO#X~U8vU#cQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9aUrS!VQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9x]rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#U:q#U#o,Y#o;'S#{;'S;=`$d<%lO#{U:v^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#`,Y#`#a;r#a#o,Y#o;'S#{;'S;=`$d<%lO#{U;w^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#g,Y#g#h<s#h#o,Y#o;'S#{;'S;=`$d<%lO#{U<x^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#X,Y#X#Y=t#Y#o,Y#o;'S#{;'S;=`$d<%lO#{U={[uQrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^>x[#YWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^?u[#[WrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^@r^#ZWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#f,Y#f#gAn#g#o,Y#o;'S#{;'S;=`$d<%lO#{UAs^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#i,Y#i#j<s#j#o,Y#o;'S#{;'S;=`$d<%lO#{UBvU!ZQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~C_O#l~",
|
||||
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO#Q~~", 11)],
|
||||
tokenData: "C_~R|OX#{XY$jYZ%TZp#{pq$jqs#{st%ntu'Vuw#{wx'[xy'ayz'zz{#{{|(e|}#{}!O+X!O!P#{!P!Q-n!Q![)S![!]6Z!]!^%T!^!}#{!}#O6t#O#P8j#P#Q8o#Q#R#{#R#S9Y#S#T#{#T#Y,Y#Y#Z9s#Z#b,Y#b#c>q#c#f,Y#f#g?n#g#h,Y#h#i@k#i#o,Y#o#p#{#p#qBo#q;'S#{;'S;=`$d<%l~#{~O#{~~CYS$QUrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{S$gP;=`<%l#{^$qUrS!wYOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U%[UrS#ZQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{^%uZrS!xYOY%nYZ#{Zt%ntu&huw%nwx&hx#O%n#O#P&h#P;'S%n;'S;=`'P<%lO%nY&mS!xYOY&hZ;'S&h;'S;=`&y<%lO&hY&|P;=`<%l&h^'SP;=`<%l%n~'[O#S~~'aO#Q~U'hUrS!}QOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(RUrS#^QOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U(jWrSOt#{uw#{x!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U)ZYrSmQOt#{uw#{x!O#{!O!P)y!P!Q#{!Q![)S![#O#{#P;'S#{;'S;=`$d<%lO#{U*OWrSOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U*oWrSmQOt#{uw#{x!Q#{!Q![*h![#O#{#P;'S#{;'S;=`$d<%lO#{U+^^rSOt#{uw#{x}#{}!O,Y!O!Q#{!Q![)S![!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U,_[rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{U-[UyQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U-sWrSOt#{uw#{x!P#{!P!Q.]!Q#O#{#P;'S#{;'S;=`$d<%lO#{U.b^rSOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q#{!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^U/e^rSvQOY/^YZ#{Zt/^tu0auw/^wx0ax!P/^!P!Q3U!Q!}/^!}#O5S#O#P2o#P;'S/^;'S;=`6T<%lO/^Q0fXvQOY0aZ!P0a!P!Q1R!Q!}0a!}#O1p#O#P2o#P;'S0a;'S;=`3O<%lO0aQ1UP!P!Q1XQ1^UvQ#Z#[1X#]#^1X#a#b1X#g#h1X#i#j1X#m#n1XQ1sVOY1pZ#O1p#O#P2Y#P#Q0a#Q;'S1p;'S;=`2i<%lO1pQ2]SOY1pZ;'S1p;'S;=`2i<%lO1pQ2lP;=`<%l1pQ2rSOY0aZ;'S0a;'S;=`3O<%lO0aQ3RP;=`<%l0aU3ZWrSOt#{uw#{x!P#{!P!Q3s!Q#O#{#P;'S#{;'S;=`$d<%lO#{U3zbrSvQOt#{uw#{x#O#{#P#Z#{#Z#[3s#[#]#{#]#^3s#^#a#{#a#b3s#b#g#{#g#h3s#h#i#{#i#j3s#j#m#{#m#n3s#n;'S#{;'S;=`$d<%lO#{U5X[rSOY5SYZ#{Zt5Stu1puw5Swx1px#O5S#O#P2Y#P#Q/^#Q;'S5S;'S;=`5}<%lO5SU6QP;=`<%l5SU6WP;=`<%l/^U6bUrS!OQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U6{W#YQrSOt#{uw#{x!_#{!_!`7e!`#O#{#P;'S#{;'S;=`$d<%lO#{U7jVrSOt#{uw#{x#O#{#P#Q8P#Q;'S#{;'S;=`$d<%lO#{U8WU#XQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~8oO#T~U8vU#]QrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9aUrS!VQOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{U9x]rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#U:q#U#o,Y#o;'S#{;'S;=`$d<%lO#{U:v^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#`,Y#`#a;r#a#o,Y#o;'S#{;'S;=`$d<%lO#{U;w^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#g,Y#g#h<s#h#o,Y#o;'S#{;'S;=`$d<%lO#{U<x^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#X,Y#X#Y=t#Y#o,Y#o;'S#{;'S;=`$d<%lO#{U={[uQrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^>x[#UWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^?u[#WWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#o,Y#o;'S#{;'S;=`$d<%lO#{^@r^#VWrSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#f,Y#f#gAn#g#o,Y#o;'S#{;'S;=`$d<%lO#{UAs^rSOt#{uw#{x}#{}!O,Y!O!_#{!_!`-T!`#O#{#P#T#{#T#i,Y#i#j<s#j#o,Y#o;'S#{;'S;=`$d<%lO#{UBvU!ZQrSOt#{uw#{x#O#{#P;'S#{;'S;=`$d<%lO#{~C_O#`~",
|
||||
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO!|~~", 11)],
|
||||
topRules: {"Program":[0,25]},
|
||||
specialized: [{term: 20, get: (value: any, stack: any) => (specializeKeyword(value, stack) << 1), external: specializeKeyword},{term: 20, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
|
||||
tokenPrec: 1705
|
||||
tokenPrec: 1582
|
||||
})
|
||||
|
|
|
|||
|
|
@ -752,7 +752,7 @@ Assign
|
|||
EqEq ==
|
||||
Number 5
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end
|
||||
keyword end
|
||||
|
|
@ -794,7 +794,7 @@ Assign
|
|||
EqEq ==
|
||||
Number 5
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end
|
||||
keyword end
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ describe('if/elseif/else', () => {
|
|||
EqEq ==
|
||||
Number 1
|
||||
colon :
|
||||
SingleLineThenBlock
|
||||
Block
|
||||
String
|
||||
StringFragment cool
|
||||
keyword end
|
||||
|
|
@ -26,7 +26,7 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier x
|
||||
colon :
|
||||
SingleLineThenBlock
|
||||
Block
|
||||
Number 2
|
||||
keyword end
|
||||
`)
|
||||
|
|
@ -44,7 +44,7 @@ describe('if/elseif/else', () => {
|
|||
Lt <
|
||||
Number 9
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier yes
|
||||
keyword end
|
||||
|
|
@ -61,13 +61,13 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier with-else
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier x
|
||||
ElseExpr
|
||||
keyword else
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier y
|
||||
keyword end
|
||||
|
|
@ -84,14 +84,14 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier with-elseif
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier x
|
||||
ElseIfExpr
|
||||
keyword elseif
|
||||
Identifier another-condition
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier y
|
||||
keyword end
|
||||
|
|
@ -112,27 +112,27 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier with-elseif-else
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier x
|
||||
ElseIfExpr
|
||||
keyword elseif
|
||||
Identifier another-condition
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier y
|
||||
ElseIfExpr
|
||||
keyword elseif
|
||||
Identifier yet-another-condition
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier z
|
||||
ElseExpr
|
||||
keyword else
|
||||
colon :
|
||||
ThenBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier oh-no
|
||||
keyword end
|
||||
|
|
@ -148,7 +148,7 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Boolean true
|
||||
colon :
|
||||
SingleLineThenBlock
|
||||
Block
|
||||
Number 2
|
||||
keyword end
|
||||
`)
|
||||
|
|
@ -162,7 +162,7 @@ describe('while', () => {
|
|||
keyword while
|
||||
Boolean true
|
||||
colon :
|
||||
SingleLineBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -176,7 +176,7 @@ describe('while', () => {
|
|||
Gt >
|
||||
Number 0
|
||||
colon :
|
||||
SingleLineBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -203,7 +203,7 @@ describe('while', () => {
|
|||
Lt <
|
||||
Number 1000
|
||||
colon :
|
||||
SingleLineBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -217,7 +217,7 @@ describe('while', () => {
|
|||
keyword while
|
||||
Boolean true
|
||||
colon :
|
||||
MultiLineBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -234,7 +234,7 @@ describe('while', () => {
|
|||
Gt >
|
||||
Number 0
|
||||
colon :
|
||||
MultiLineBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -264,7 +264,7 @@ describe('while', () => {
|
|||
Lt <
|
||||
Number 1000
|
||||
colon :
|
||||
MultiLineBlock
|
||||
Block
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -12,14 +12,14 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier risky-operation
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCall
|
||||
Identifier handle-error
|
||||
PositionalArg
|
||||
|
|
@ -37,13 +37,13 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier do-work
|
||||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
|
|
@ -61,14 +61,14 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier risky-operation
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCall
|
||||
Identifier handle-error
|
||||
PositionalArg
|
||||
|
|
@ -76,7 +76,7 @@ describe('try/catch/finally/throw', () => {
|
|||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
|
|
@ -91,15 +91,17 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
FunctionCall
|
||||
Identifier parse-number
|
||||
PositionalArg
|
||||
Identifier input
|
||||
Block
|
||||
FunctionCall
|
||||
Identifier parse-number
|
||||
PositionalArg
|
||||
Identifier input
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Number 0
|
||||
Block
|
||||
Number 0
|
||||
keyword end
|
||||
`)
|
||||
})
|
||||
|
|
@ -109,18 +111,21 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Number 0
|
||||
Block
|
||||
Number 0
|
||||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
`)
|
||||
})
|
||||
|
|
@ -164,13 +169,15 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Number 0
|
||||
Block
|
||||
Number 0
|
||||
keyword end
|
||||
`)
|
||||
})
|
||||
|
|
@ -199,7 +206,7 @@ describe('function-level exception handling', () => {
|
|||
keyword catch
|
||||
Identifier e
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier empty-string
|
||||
keyword end
|
||||
|
|
@ -227,7 +234,7 @@ describe('function-level exception handling', () => {
|
|||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier close-resources
|
||||
keyword end
|
||||
|
|
@ -259,7 +266,7 @@ describe('function-level exception handling', () => {
|
|||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCall
|
||||
Identifier log
|
||||
PositionalArg
|
||||
|
|
@ -269,7 +276,7 @@ describe('function-level exception handling', () => {
|
|||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
TryBlock
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user