allow conditionals at statement-level

This commit is contained in:
Chris Wanstrath 2025-10-29 11:21:16 -07:00
parent 34305b473e
commit 0dbba4d847
2 changed files with 5 additions and 4 deletions

View File

@ -55,6 +55,7 @@ consumeToTerminator {
FunctionDef |
Assign |
BinOp |
ConditionalOp |
expressionWithoutIdentifier
}

View File

@ -7,9 +7,9 @@ import {highlighting} from "./highlight"
const spec_Identifier = {__proto__:null,end:80, null:86, if:96, elseif:104, else:108}
export const parser = LRParser.deserialize({
version: 14,
states: "3UQYQbOOO!ZOpO'#CsO#mQcO'#CvO$jOSO'#CxO$xQbO'#EVOOQ`'#DR'#DROOQa'#DO'#DOO%{QbO'#DWO'QQcO'#DzOOQa'#Dz'#DzO(lQcO'#DyO(yQRO'#CwO)[QcO'#DuO)sQbO'#CuOOQ`'#Dv'#DvO*kQbO'#DuO*yQbO'#E]OOQ`'#D]'#D]O+nQRO'#DeOOQ`'#Du'#DuO+sQQO'#DtOOQ`'#Dt'#DtOOQ`'#Df'#DfQYQbOOO+{ObO,59_O,TQbO'#DPOOQa'#Dy'#DyOOQ`'#DZ'#DZOOQ`'#E['#E[OOQ`'#Dm'#DmO,_QbO,59^O,rQbO'#CzO,zQWO'#C{OOOO'#D|'#D|OOOO'#Dg'#DgO-`OSO,59dOOQa,59d,59dOOQ`'#Di'#DiO-nQbO'#DSO-vQQO,5:qOOQ`'#Dh'#DhO-{QbO,59rO.SQQO,59jOOQa,59r,59rO._QbO,59rO*yQbO,59cO*yQbO,59cO*yQbO,59cO.iQRO,59aO/YQRO'#CwO/vQRO,59aO0XQRO,59aO0SQQO,59aO0dQQO,59aO0lQbO'#DnO0wQbO,59]O1tQRO,5:wO1{QRO,5:wO2WQbO,5:POOQ`,5:`,5:`OOQ`-E7d-E7dOOQa1G.y1G.yOOQ`,59k,59kOOQ`-E7k-E7kOOOO,59f,59fOOOO,59g,59gOOOO-E7e-E7eOOQa1G/O1G/OOOQ`-E7g-E7gO2bQbO1G0]OOQ`-E7f-E7fO2oQQO1G/UOOQa1G/^1G/^O2zQbO1G/^OOQO'#Dk'#DkO2oQQO1G/UOOQa1G/U1G/UOOQ`'#Dl'#DlO2zQbO1G/^OOQa1G.}1G.}O3mQcO1G.}O3wQcO1G.}O4RQcO1G.}OOQa1G.{1G.{O*yQbO,59tO*yQbO,59tO*yQbO,59tO!`QbO'#CvO&SQbO'#CrOOQ`,5:Y,5:YOOQ`-E7l-E7lO4mQbO1G0cOOQ`1G/k1G/kO4zQbO7+%wO5PQbO7+%xO5aQQO7+$pOOQa7+$p7+$pO5lQbO7+$xOOQa7+$x7+$xOOQO-E7i-E7iOOQ`-E7j-E7jOOQP1G/`1G/`O6eQRO1G/`O6lQRO1G/`O6zQRO1G/`OOQ`'#D_'#D_O7RQbO7+%}O7WQbO7+&OOOQ`<<Ic<<IcOOQ`'#Dj'#DjO7nQQO'#DjO7sQbO'#EXO8ZQbO<<IdOOQa<<H[<<H[OOQa<<Hd<<HdOOQ`<<Ii<<IiOOQ`'#D`'#D`O8`QbO<<IjOOQ`,5:U,5:UOOQ`-E7h-E7hOOQ`AN?OAN?OO*yQbO'#DaOOQ`'#Do'#DoO8kQbOAN?UO8vQQO'#DcOOQ`AN?UAN?UO8{QbOAN?UO9QQRO,59{O9XQRO,59{OOQ`-E7m-E7mOOQ`G24pG24pO9dQbOG24pO9iQQO,59}O9nQQO1G/gOOQ`LD*[LD*[O5PQbO1G/iO7WQbO7+%ROOQ`7+%T7+%TOOQ`<<Hm<<Hm",
stateData: "9v~O!fOS!gOS~O_QO`bOaXObPOcSOhXOpXOqXO{XO!Q`O!l]O!oRO!vUO!wVO!xeO~O!khO~O_jOaXObPOcSOhXOpXOqXOtiOykO{XO!l]O!oRO!vUO!wVO!OjX!xjX#RjX!}jXxjX~OP!mXQ!mXR!mXS!mX^!mXT!mXU!mXW!mXX!mXY!mXZ!mX[!mX]!mX~P!`OmqO!otO!qoO!rpO~O_uOwvP~O_jOaXObPOhXOpXOqXOtiO{XO!l]O!oRO!vUO!wVO!xxO~O!|{O~P%QO_jOaXObPOcSOhXOpXOqXOtiOykO{XO!l]O!oRO!vUO!wVO~OP!nXQ!nXR!nXS!nX^!nX!x!nX#R!nXT!nXU!nXW!nXX!nXY!nXZ!nX[!nX]!nX!}!nXx!nX~P&SOP!mXQ!mXR!mXS!mX^!mX~O!x!iX#R!iXx!iX~P(ZOP!OOQ!OOR!POS!PO^}O~OP!OOQ!OOR!POS!PO!x!iX#R!iXx!iX~O_QOaXObPOcSOhXOpXOqXO{XO!l]O!oRO!vUO!wVO~O!O!WO!x!iX#R!iXx!iX~O_jOaXObPOhXOpXOqXO{XO!l]O!oRO!vUO!wVO~OV![O~O!x!]O#R!]O~O_!_Oh!_O~OcSOy!`O~P*yO!Ofa!xfa#Rfa!}faxfa~P&SO_!bO!l]O~O!o!cO!q!cO!r!cO!s!cO!t!cO!u!cO~OmqO!o!eO!qoO!rpO~O_uOwvX~Ow!gO~O!|!jO~P%QOtiO!x!lO!|!nO~O!x!oO!|!jO~P*yO!}!uOT!mXU!mXW!mXX!mXY!mXZ!mX[!mX]!mX~P(ZOT!wOU!xOW!vOX!vOY!vOZ!vO[!vO]!vO~P(yOP!OOQ!OOR!POS!PO!}!uO~OT!wOU!xO!}!uO~O!O!WO!}!uO~O_!yObPO!l]O~O!O!WO!xea#Rea!}eaxea~OT!wOU!xOW!vOX!vOY!vOZ!vO[!vO]!vO~Ow!}O~P1YOT!wOU!xOw!}O~O`bO!Q`O~P)sO`bO!Q`O!x#QO~P)sOtiO!x!lO!|#SO~O!x!oO!|#UO~P*yO^}ORkiSki!xki#Rki!}kixki~OPkiQki~P3UOP!OOQ!OO~P3UOP!OOQ!OORkiSki!xki#Rki!}kixki~O`bO!Q`O!x#_O~P)sOx#`O~O`bO!Q`O!x#aOx!{P~P)sOtiO!x!lO!|#eO~O!x!oO!|#fO~P*yOW!vOX!vOY!vOZ!vO[!vO]!vOT|i!}|iw|i~OU!xO~P5vOU!xOT|i!}|iw|i~OU|i~P5vOx#gO~O`bO!Q`O!x#aOx!{P!U!{P!W!{P~P)sO!x#jO~O`bO!Q`O!x#aOx!{X!U!{X!W!{X~P)sOx#lO~Ox#qO!U#mO!W#pO~Ox#vO!U#mO!W#pO~Ow#xO~Ox#vO~Ow#yO~P1YOT!wOU!xOw#yO~Ox#zO~O!x#{O~O!x#|O~Ohq~",
goto: ".p#RPPPPPPPPPPPPPPPPPPPPP#S#c#qP$i#c%d%yP&l&lPP%y&pP'T'nPPP%yP'q(QP(XP(e(h(qP(uP(X({)R)X)_)e)n)x*S*]*dPPPP*j*n+SPP+f,uP-lPPPPPPPP-p-p.TPP.].d.ddcOg![!g!}#Q#_#c#{#|R!U]i^O]g!W![!g!}#Q#_#c#{#|fQO]g![!g!}#Q#_#c#{#|xjQVW`iny|}!O!P!k!p!v!w!x!y!z#T#mR!y!WfWO]g![!g!}#Q#_#c#{#|xXQVW`iny|}!O!P!k!p!v!w!x!y!z#T#mQ!boR!z!Wd[Og![!g!}#Q#_#c#{#|Q!S]Q!q!OR!t!P!aXOQVW]`giny|}!O!P![!g!k!p!v!w!x!y!z!}#Q#T#_#c#m#{#|TqRsYlQWn!y!zQzVQ!iyX!lz!i!m#RdcOg![!g!}#Q#_#c#{#|YkQWn!y!zQ!U]R!`iRwSQ!T]Q!Z`Q#X!xQ#Z!wR#t#mZlQWn!y!zecOg![!g!}#Q#_#c#{#|R#^!}Q#i#_Q#}#{R$O#|T#n#i#oQ#r#iR#w#oQgOR!^gQsRR!dsQyVR!hyQvSR!fvW#c#Q#_#{#|R#k#cQ!mzQ#R!iT#V!m#RQ!p|Q#T!kT#W!p#TWnQW!y!zR!anS!X_!VR!|!XQ#o#iR#u#oTfOgSdOgQ#O![Q#P!gQ#]!}Z#b#Q#_#c#{#|d_Og![!g!}#Q#_#c#{#|Q!V]R!{!WdZOg![!g!}#Q#_#c#{#|YkQWn!y!zQ|VQ!R]Q!Y`Q!`iQ!kyW!o|!k!p#TQ!q}Q!r!OQ!s!PQ#X!vQ#Y!wQ#[!xR#s#mdYOg![!g!}#Q#_#c#{#|xjQVW`iny|}!O!P!k!p!v!w!x!y!z#T#mR!Q]TrRssTOQW]gin![!g!y!z!}#Q#_#c#{#|Q#d#QV#h#_#{#|ZmQWn!y!zeaOg![!g!}#Q#_#c#{#|",
states: "3UQYQbOOO!ZOpO'#CsO#mQcO'#CvO$jOSO'#CxO$xQbO'#EVOOQ`'#DR'#DROOQa'#DO'#DOO%{QbO'#DWO'QQcO'#DzOOQa'#Dz'#DzO)UQcO'#DyO)}QRO'#CwO*bQcO'#DuO*yQcO'#DuO+[QbO'#CuOOQ`'#Dv'#DvO,SQbO'#DuO,bQbO'#E]OOQ`'#D]'#D]O-VQRO'#DeOOQ`'#Du'#DuO-[QQO'#DtOOQ`'#Dt'#DtOOQ`'#Df'#DfQYQbOOO-dObO,59_O-lQbO'#DPOOQa'#Dy'#DyOOQ`'#DZ'#DZOOQ`'#E['#E[OOQ`'#Dm'#DmO-vQbO,59^O.ZQbO'#CzO.cQWO'#C{OOOO'#D|'#D|OOOO'#Dg'#DgO.wOSO,59dOOQa,59d,59dOOQ`'#Di'#DiO/VQbO'#DSO/_QQO,5:qOOQ`'#Dh'#DhO/dQbO,59rO/kQQO,59jOOQa,59r,59rO/vQbO,59rO,bQbO,59cO,bQbO,59cO,bQbO,59cO,bQbO,59tO,bQbO,59tO,bQbO,59tO0QQRO,59aO0XQRO,59aO0jQRO,59aO0eQQO,59aO0uQQO,59aO0}QbO'#DnO1YQbO,59]O1kQRO,5:wO1rQRO,5:wO1}QbO,5:POOQ`,5:`,5:`OOQ`-E7d-E7dOOQa1G.y1G.yOOQ`,59k,59kOOQ`-E7k-E7kOOOO,59f,59fOOOO,59g,59gOOOO-E7e-E7eOOQa1G/O1G/OOOQ`-E7g-E7gO2XQbO1G0]OOQ`-E7f-E7fO2fQQO1G/UOOQa1G/^1G/^O2qQbO1G/^OOQO'#Dk'#DkO2fQQO1G/UOOQa1G/U1G/UOOQ`'#Dl'#DlO2qQbO1G/^OOQa1G.}1G.}O3dQcO1G.}O3nQcO1G.}O3xQcO1G.}OOQa1G/`1G/`O5[QcO1G/`O5cQcO1G/`O5jQcO1G/`OOQa1G.{1G.{O!`QbO'#CvO&SQbO'#CrOOQ`,5:Y,5:YOOQ`-E7l-E7lO5qQbO1G0cOOQ`1G/k1G/kO6OQbO7+%wO6TQbO7+%xO6eQQO7+$pOOQa7+$p7+$pO6pQbO7+$xOOQa7+$x7+$xOOQO-E7i-E7iOOQ`-E7j-E7jOOQ`'#D_'#D_O6zQbO7+%}O7PQbO7+&OOOQ`<<Ic<<IcOOQ`'#Dj'#DjO7gQQO'#DjO7lQbO'#EXO8SQbO<<IdOOQa<<H[<<H[OOQa<<Hd<<HdOOQ`<<Ii<<IiOOQ`'#D`'#D`O8XQbO<<IjOOQ`,5:U,5:UOOQ`-E7h-E7hOOQ`AN?OAN?OO,bQbO'#DaOOQ`'#Do'#DoO8dQbOAN?UO8oQQO'#DcOOQ`AN?UAN?UO8tQbOAN?UO8yQRO,59{O9QQRO,59{OOQ`-E7m-E7mOOQ`G24pG24pO9]QbOG24pO9bQQO,59}O9gQQO1G/gOOQ`LD*[LD*[O6TQbO1G/iO7PQbO7+%ROOQ`7+%T7+%TOOQ`<<Hm<<Hm",
stateData: "9o~O!fOS!gOS~O_QO`cOaXObPOcSOhXOpXOqXO{XO!QaO!l^O!oRO!vUO!wVO!xfO~O!kiO~O_kOaXObPOcSOhXOpXOqXOtjOylO{XO!l^O!oRO!vUO!wVO!OjX!xjX#RjX!}jXxjX~OP!mXQ!mXR!mXS!mXT!mXU!mXW!mXX!mXY!mXZ!mX[!mX]!mX^!mX~P!`OmrO!ouO!qpO!rqO~O_vOwvP~O_kOaXObPOhXOpXOqXOtjO{XO!l^O!oRO!vUO!wVO!xyO~O!||O~P%QO_kOaXObPOcSOhXOpXOqXOtjOylO{XO!l^O!oRO!vUO!wVO~OP!nXQ!nXR!nXS!nXT!nXU!nXW!nXX!nXY!nXZ!nX[!nX]!nX^!nX!x!nX#R!nX!}!nXx!nX~P&SOP!mXQ!mXR!mXS!mXT!mXU!mXW!mXX!mXY!mXZ!mX[!mX]!mX^!mX~O!x!iX#R!iXx!iX~P(ZOT!SOU!TOW!ROX!ROY!ROZ!RO[!RO]!RO~OP!POQ!POR!QOS!QO^!OO~P)cOP!POQ!POR!QOS!QO!x!iX#R!iXx!iX~OT!SOU!TO!x!iX#R!iXx!iX~O_QOaXObPOcSOhXOpXOqXO{XO!l^O!oRO!vUO!wVO~O!O!ZO!x!iX#R!iXx!iX~O_kOaXObPOhXOpXOqXO{XO!l^O!oRO!vUO!wVO~OV!_O~O!x!`O#R!`O~O_!bOh!bO~OcSOy!cO~P,bO!Ofa!xfa#Rfa!}faxfa~P&SO_!eO!l^O~O!o!fO!q!fO!r!fO!s!fO!t!fO!u!fO~OmrO!o!hO!qpO!rqO~O_vOwvX~Ow!jO~O!|!mO~P%QOtjO!x!oO!|!qO~O!x!rO!|!mO~P,bO!}!|O~P(ZOP!POQ!POR!QOS!QO!}!|O~OT!SOU!TO!}!|O~O!O!ZO!}!|O~O_!}ObPO!l^O~O!O!ZO!xea#Rea!}eaxea~Ow#RO~P)cOT!SOU!TOw#RO~O`cO!QaO~P+[O`cO!QaO!x#UO~P+[OtjO!x!oO!|#WO~O!x!rO!|#YO~P,bO^!OORkiSki!xki#Rki!}kixki~OPkiQki~P2{OP!POQ!PO~P2{OP!POQ!PORkiSki!xki#Rki!}kixki~OW!ROX!ROY!ROZ!RO[!RO]!ROT|i!x|i#R|i!}|iw|ix|i~OU!TO~P4dOU!TO~P4vOU|i~P4dO`cO!QaO!x#_O~P+[Ox#`O~O`cO!QaO!x#aOx!{P~P+[OtjO!x!oO!|#eO~O!x!rO!|#fO~P,bOx#gO~O`cO!QaO!x#aOx!{P!U!{P!W!{P~P+[O!x#jO~O`cO!QaO!x#aOx!{X!U!{X!W!{X~P+[Ox#lO~Ox#qO!U#mO!W#pO~Ox#vO!U#mO!W#pO~Ow#xO~Ox#vO~Ow#yO~P)cOT!SOU!TOw#yO~Ox#zO~O!x#{O~O!x#|O~Ohq~",
goto: ".z#RPPPPPPPPPPPPPPPPPPPPP#S#c#qP$i#c%d%yP&l&lPP%y&pP'T'nPPP%yP'q(^P(eP(q(t(}P)RP(e)X)_)e)k)q)z*U*`*i*pPPPP*v*z+`PP+r-PP-vPPPPPPPP-z-z._PP.g.n.nddOh!_!j#R#U#_#c#{#|R!X^i_O^h!Z!_!j#R#U#_#c#{#|fQO^h!_!j#R#U#_#c#{#|xkQVWajoz}!O!P!Q!R!S!T!n!s!}#O#X#mR!}!ZfWO^h!_!j#R#U#_#c#{#|xXQVWajoz}!O!P!Q!R!S!T!n!s!}#O#X#mQ!epR#O!Zd[Oh!_!j#R#U#_#c#{#|Q!V^Q!t!PR!w!Q!aXOQVW^ahjoz}!O!P!Q!R!S!T!_!j!n!s!}#O#R#U#X#_#c#m#{#|TrRtYmQWo!}#OQ{VQ!lzX!o{!l!p#VddOh!_!j#R#U#_#c#{#|YlQWo!}#OQ!X^R!cjRxSd]Oh!_!j#R#U#_#c#{#|Q!W^Q!^aQ!x!TQ!z!SR#t#mZmQWo!}#OedOh!_!j#R#U#_#c#{#|R#^#RQ#i#_Q#}#{R$O#|T#n#i#oQ#r#iR#w#oQhOR!ahQtRR!gtQzVR!kzQwSR!iwW#c#U#_#{#|R#k#cQ!p{Q#V!lT#Z!p#VQ!s}Q#X!nT#[!s#XWoQW!}#OR!doS![`!YR#Q![Q#o#iR#u#oTgOhSeOhQ#S!_Q#T!jQ#]#RZ#b#U#_#c#{#|d`Oh!_!j#R#U#_#c#{#|Q!Y^R#P!ZfZO^h!_!j#R#U#_#c#{#|YlQWo!}#OQ}VQ!]aQ!cjQ!nzW!r}!n!s#XQ!t!OQ!u!PQ!v!QQ!x!RQ!y!SQ!{!TR#s#mdYOh!_!j#R#U#_#c#{#|xkQVWajoz}!O!P!Q!R!S!T!n!s!}#O#X#mR!U^TsRtsTOQW^hjo!_!j!}#O#R#U#_#c#{#|Q#d#UV#h#_#{#|ZnQWo!}#OebOh!_!j#R#U#_#c#{#|",
nodeNames: "⚠ Star Slash Plus Minus And Or Eq EqEq Neq Lt Lte Gt Gte Modulo Identifier AssignableIdentifier Word IdentifierBeforeDot Do Program PipeExpr FunctionCall DotGet Number ParenExpr FunctionCallOrIdentifier BinOp String StringFragment Interpolation EscapeSeq Boolean Regex Dict NamedArg NamedArgPrefix FunctionDef Params colon keyword Underscore Array Null ConditionalOp PositionalArg operator IfExpr keyword SingleLineThenBlock ThenBlock ElseIfExpr keyword ElseExpr keyword Assign",
maxTerm: 95,
context: trackScope,
@ -23,5 +23,5 @@ export const parser = LRParser.deserialize({
tokenizers: [operatorTokenizer, 1, 2, 3, tokenizer, new LocalTokenGroup("[~RP!O!PU~ZO!k~~", 11)],
topRules: {"Program":[0,20]},
specialized: [{term: 15, get: (value: any, stack: any) => (specializeKeyword(value, stack) << 1), external: specializeKeyword},{term: 15, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],
tokenPrec: 1139
tokenPrec: 1132
})