Compare commits
No commits in common. "0d1f1323791684a01c599fea6743315f2b678840" and "5f4bf60062e5a6c79aa77ec6479145dfc2c1f9b8" have entirely different histories.
0d1f132379
...
5f4bf60062
|
|
@ -389,7 +389,11 @@ export class Compiler {
|
|||
return instructions
|
||||
}
|
||||
|
||||
case terms.Block: {
|
||||
case terms.MultiLineBlock:
|
||||
case terms.SingleLineBlock:
|
||||
case terms.ThenBlock:
|
||||
case terms.SingleLineThenBlock:
|
||||
case terms.TryBlock: {
|
||||
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 Block or statement
|
||||
// First child is always 'try' keyword, second is colon, third is TryBlock or statement
|
||||
const [tryKeyword, _colon, tryBlock, ...rest] = children
|
||||
|
||||
if (!tryKeyword || !tryBlock) {
|
||||
|
|
|
|||
|
|
@ -25,18 +25,8 @@
|
|||
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 }
|
||||
|
|
@ -57,6 +47,7 @@ item {
|
|||
newlineOrSemicolon // allow blank lines
|
||||
}
|
||||
|
||||
|
||||
consumeToTerminator {
|
||||
PipeExpr |
|
||||
WhileExpr |
|
||||
|
|
@ -81,11 +72,23 @@ pipeOperand {
|
|||
}
|
||||
|
||||
WhileExpr {
|
||||
while (ConditionalOp | expression) colon Block end
|
||||
singleLineWhileExpr | multiLineWhileExpr
|
||||
}
|
||||
|
||||
Block {
|
||||
consumeToTerminator | newlineOrSemicolon block
|
||||
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">
|
||||
}
|
||||
|
||||
FunctionCallOrIdentifier {
|
||||
|
|
@ -104,6 +107,7 @@ arg {
|
|||
PositionalArg | NamedArg
|
||||
}
|
||||
|
||||
|
||||
PositionalArg {
|
||||
expression | FunctionDef | Underscore
|
||||
}
|
||||
|
|
@ -113,35 +117,71 @@ NamedArg {
|
|||
}
|
||||
|
||||
FunctionDef {
|
||||
Do Params colon (consumeToTerminator | newlineOrSemicolon block) CatchExpr? FinallyExpr? end
|
||||
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">
|
||||
}
|
||||
|
||||
IfExpr {
|
||||
if (ConditionalOp | expression) colon Block ElseIfExpr* ElseExpr? end
|
||||
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">
|
||||
}
|
||||
|
||||
ElseIfExpr {
|
||||
elseif (ConditionalOp | expression) colon Block
|
||||
@specialize[@name=keyword]<Identifier, "elseif"> (ConditionalOp | expression) colon newlineOrSemicolon ThenBlock
|
||||
}
|
||||
|
||||
ElseExpr {
|
||||
else colon Block
|
||||
@specialize[@name=keyword]<Identifier, "else"> colon newlineOrSemicolon ThenBlock
|
||||
}
|
||||
|
||||
ThenBlock {
|
||||
block
|
||||
}
|
||||
|
||||
SingleLineThenBlock {
|
||||
consumeToTerminator
|
||||
}
|
||||
|
||||
TryExpr {
|
||||
try colon Block CatchExpr? FinallyExpr? end
|
||||
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">
|
||||
}
|
||||
|
||||
CatchExpr {
|
||||
catch Identifier colon Block
|
||||
@specialize[@name=keyword]<Identifier, "catch"> Identifier colon (newlineOrSemicolon TryBlock | consumeToTerminator)
|
||||
}
|
||||
|
||||
FinallyExpr {
|
||||
finally colon Block
|
||||
@specialize[@name=keyword]<Identifier, "finally"> colon (newlineOrSemicolon TryBlock | consumeToTerminator)
|
||||
}
|
||||
|
||||
TryBlock {
|
||||
block
|
||||
}
|
||||
|
||||
Throw {
|
||||
throw (BinOp | ConditionalOp | expression)
|
||||
@specialize[@name=keyword]<Identifier, "throw"> (BinOp | ConditionalOp | expression)
|
||||
}
|
||||
|
||||
ConditionalOp {
|
||||
|
|
@ -160,7 +200,7 @@ Params {
|
|||
}
|
||||
|
||||
NamedParam {
|
||||
NamedArgPrefix (String | Number | Boolean | null)
|
||||
NamedArgPrefix (String | Number | Boolean | @specialize[@name=Null]<Identifier, "null">)
|
||||
}
|
||||
|
||||
Assign {
|
||||
|
|
@ -198,6 +238,7 @@ expression {
|
|||
}
|
||||
|
||||
String { "'" stringContent* "'" }
|
||||
|
||||
}
|
||||
|
||||
stringContent {
|
||||
|
|
@ -233,7 +274,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 | null
|
||||
ParenExpr | Word | String | Number | Boolean | Regex | Dict | Array | @specialize[@name=Null]<Identifier, "null">
|
||||
}
|
||||
|
||||
block {
|
||||
|
|
|
|||
|
|
@ -47,18 +47,22 @@ export const
|
|||
Null = 45,
|
||||
colon = 46,
|
||||
CatchExpr = 47,
|
||||
keyword = 69,
|
||||
Block = 49,
|
||||
keyword = 73,
|
||||
TryBlock = 49,
|
||||
FinallyExpr = 50,
|
||||
Underscore = 53,
|
||||
Array = 54,
|
||||
ConditionalOp = 55,
|
||||
PositionalArg = 56,
|
||||
WhileExpr = 58,
|
||||
TryExpr = 60,
|
||||
Throw = 62,
|
||||
IfExpr = 64,
|
||||
ElseIfExpr = 66,
|
||||
ElseExpr = 68,
|
||||
CompoundAssign = 70,
|
||||
Assign = 71
|
||||
SingleLineBlock = 60,
|
||||
MultiLineBlock = 61,
|
||||
TryExpr = 62,
|
||||
Throw = 64,
|
||||
IfExpr = 66,
|
||||
SingleLineThenBlock = 68,
|
||||
ThenBlock = 69,
|
||||
ElseIfExpr = 70,
|
||||
ElseExpr = 72,
|
||||
CompoundAssign = 74,
|
||||
Assign = 75
|
||||
|
|
|
|||
|
|
@ -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:122, throw:126, if:130, elseif:134, else:138}
|
||||
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}
|
||||
export const parser = LRParser.deserialize({
|
||||
version: 14,
|
||||
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,
|
||||
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,
|
||||
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!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)],
|
||||
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)],
|
||||
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: 1582
|
||||
tokenPrec: 1705
|
||||
})
|
||||
|
|
|
|||
|
|
@ -752,7 +752,7 @@ Assign
|
|||
EqEq ==
|
||||
Number 5
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
Boolean true
|
||||
keyword end
|
||||
keyword end
|
||||
|
|
@ -794,7 +794,7 @@ Assign
|
|||
EqEq ==
|
||||
Number 5
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
Boolean true
|
||||
keyword end
|
||||
keyword end
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ describe('if/elseif/else', () => {
|
|||
EqEq ==
|
||||
Number 1
|
||||
colon :
|
||||
Block
|
||||
SingleLineThenBlock
|
||||
String
|
||||
StringFragment cool
|
||||
keyword end
|
||||
|
|
@ -26,7 +26,7 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier x
|
||||
colon :
|
||||
Block
|
||||
SingleLineThenBlock
|
||||
Number 2
|
||||
keyword end
|
||||
`)
|
||||
|
|
@ -44,7 +44,7 @@ describe('if/elseif/else', () => {
|
|||
Lt <
|
||||
Number 9
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier yes
|
||||
keyword end
|
||||
|
|
@ -61,13 +61,13 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier with-else
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier x
|
||||
ElseExpr
|
||||
keyword else
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier y
|
||||
keyword end
|
||||
|
|
@ -84,14 +84,14 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier with-elseif
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier x
|
||||
ElseIfExpr
|
||||
keyword elseif
|
||||
Identifier another-condition
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier y
|
||||
keyword end
|
||||
|
|
@ -112,27 +112,27 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Identifier with-elseif-else
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier x
|
||||
ElseIfExpr
|
||||
keyword elseif
|
||||
Identifier another-condition
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier y
|
||||
ElseIfExpr
|
||||
keyword elseif
|
||||
Identifier yet-another-condition
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier z
|
||||
ElseExpr
|
||||
keyword else
|
||||
colon :
|
||||
Block
|
||||
ThenBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier oh-no
|
||||
keyword end
|
||||
|
|
@ -148,7 +148,7 @@ describe('if/elseif/else', () => {
|
|||
keyword if
|
||||
Boolean true
|
||||
colon :
|
||||
Block
|
||||
SingleLineThenBlock
|
||||
Number 2
|
||||
keyword end
|
||||
`)
|
||||
|
|
@ -162,7 +162,7 @@ describe('while', () => {
|
|||
keyword while
|
||||
Boolean true
|
||||
colon :
|
||||
Block
|
||||
SingleLineBlock
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -176,7 +176,7 @@ describe('while', () => {
|
|||
Gt >
|
||||
Number 0
|
||||
colon :
|
||||
Block
|
||||
SingleLineBlock
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -203,7 +203,7 @@ describe('while', () => {
|
|||
Lt <
|
||||
Number 1000
|
||||
colon :
|
||||
Block
|
||||
SingleLineBlock
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -217,7 +217,7 @@ describe('while', () => {
|
|||
keyword while
|
||||
Boolean true
|
||||
colon :
|
||||
Block
|
||||
MultiLineBlock
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -234,7 +234,7 @@ describe('while', () => {
|
|||
Gt >
|
||||
Number 0
|
||||
colon :
|
||||
Block
|
||||
MultiLineBlock
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
@ -264,7 +264,7 @@ describe('while', () => {
|
|||
Lt <
|
||||
Number 1000
|
||||
colon :
|
||||
Block
|
||||
MultiLineBlock
|
||||
Boolean true
|
||||
keyword end`)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -12,14 +12,14 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier risky-operation
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCall
|
||||
Identifier handle-error
|
||||
PositionalArg
|
||||
|
|
@ -37,13 +37,13 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier do-work
|
||||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
|
|
@ -61,14 +61,14 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier risky-operation
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCall
|
||||
Identifier handle-error
|
||||
PositionalArg
|
||||
|
|
@ -76,7 +76,7 @@ describe('try/catch/finally/throw', () => {
|
|||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
|
|
@ -91,17 +91,15 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
Block
|
||||
FunctionCall
|
||||
Identifier parse-number
|
||||
PositionalArg
|
||||
Identifier input
|
||||
FunctionCall
|
||||
Identifier parse-number
|
||||
PositionalArg
|
||||
Identifier input
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Block
|
||||
Number 0
|
||||
Number 0
|
||||
keyword end
|
||||
`)
|
||||
})
|
||||
|
|
@ -111,21 +109,18 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Block
|
||||
Number 0
|
||||
Number 0
|
||||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
`)
|
||||
})
|
||||
|
|
@ -169,15 +164,13 @@ describe('try/catch/finally/throw', () => {
|
|||
TryExpr
|
||||
keyword try
|
||||
colon :
|
||||
Block
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
FunctionCallOrIdentifier
|
||||
Identifier work
|
||||
CatchExpr
|
||||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Block
|
||||
Number 0
|
||||
Number 0
|
||||
keyword end
|
||||
`)
|
||||
})
|
||||
|
|
@ -206,7 +199,7 @@ describe('function-level exception handling', () => {
|
|||
keyword catch
|
||||
Identifier e
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier empty-string
|
||||
keyword end
|
||||
|
|
@ -234,7 +227,7 @@ describe('function-level exception handling', () => {
|
|||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier close-resources
|
||||
keyword end
|
||||
|
|
@ -266,7 +259,7 @@ describe('function-level exception handling', () => {
|
|||
keyword catch
|
||||
Identifier err
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCall
|
||||
Identifier log
|
||||
PositionalArg
|
||||
|
|
@ -276,7 +269,7 @@ describe('function-level exception handling', () => {
|
|||
FinallyExpr
|
||||
keyword finally
|
||||
colon :
|
||||
Block
|
||||
TryBlock
|
||||
FunctionCallOrIdentifier
|
||||
Identifier cleanup
|
||||
keyword end
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user